VIRTUAL SHIZUOKAをQGISで使う方法（TENGUNGUN）

# VIRTUAL SHIZUOKA（バーチャル静岡）をQGISで使う

QGISのプラグインを作って調子に乗っているので，そのあたりをメモしておきます。

https://twitter.com/jtagusari/status/1721776655851725146

## VIRTUAL SHIZUOKAとは

ジオムキムキ静岡県が公開している全県の点群データです。

https://www.pref.shizuoka.jp/machizukuri/1049255/1052183.html

## VIRTUAL SHIZUOKAの，プラグインを使わない利用方法

### データの在り処

G空間情報センターにデータがアップロードされています。全県データが，いくつかのプロジェクトに分けられています。

https://www.geospatial.jp/ckan/dataset/shizuoka-2021-pointcloud

https://www.geospatial.jp/ckan/dataset/virtual-shizuoka-mw

https://www.geospatial.jp/ckan/dataset/shizuoka-2020-pointcloud

https://www.geospatial.jp/ckan/dataset/shizuoka-2019-pointcloud

### データの取り込み方

たとえば，静岡県中・西部点群データを見ます。
「LPデータ オリジナルデータ」が航空機測量の結果の様ですが，見てみると……

![vs1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617623/3f90e443-366f-6eff-cf7a-f7a8222a50d0.png)

真っ青。ズームすると，グリッドの青だということが分かります。

![vs2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617623/83cf9ab7-93e6-b3f5-21de-427a52f938b1.png)

なんと，300m x 200mにファイルが分割されているのでした。

適当に選択してダウンロードして，解凍して，lasファイルをQGISに突っ込むと，見られます（詳細省略）。ただし，ファイルパスに日本語が含まれているとNGの様です。

細かく分割されているのはファイルサイズが大きいからで，静岡中西部だけで，全部で8TBくらいあります。仕方ないのですが，いちいち該当ファイルを探して，ダウンロードして，QGISにインポートして，というのが面倒くさすぎます。LPオリジナル，LPグラウンド，MMS，など，ファイルの種類も色々あって，切り替えが面倒です。

このデータを「使う」ことを考えると，QGISで直感的に，簡単に作業ができるようにしておきたい！そもそもQGISは点群を扱うためのソフトではないというツッコミもあろうかと思いますが，できるだけ使うソフトウェアを増やしたくないですし，たとえ最低限の機能しか備えていないとしても，QGISで点群が扱えるのであれば，まずはQGISを使いたいのでした。

そこで，プラグインを作ることに。なければ自分で作るのがオープンソースの基本です。

## ファイルの在り処（その２）

上述の通り，各ファイルはG空間情報センターからダウンロードできるのですが，リンク先はAWSを参照しているようです。たとえば，こんな感じ。

https://gic-shizuoka.s3.ap-northeast-1.amazonaws.com/2022/p/LP/LAS/08nc4500.zip

任意の箇所に対応したURLを取得したい。`08nc4500.zip`というファイル名を，位置情報から特定したい。さてこれは何だ？

で，調べてみると，国土基本図図郭のコードだということがわかりました。標準地理メッシュは知っていたけど，直交直角座標系でもそういうコードが用意されていたんですね。

https://club.informatix.co.jp/?p=1293

VIRTUAL SHIZUOKAは上述の通りいくつかのプロジェクトに分かれていますが，いずれも同様の命名規則でファイル名が付けられていることがわかりました。

ここまでわかれば，あとは，QGIS上で指定した座標の図郭コードを計算して，URLを求めて，ダウンロードするだけです。

## プラグインの開発

詳細は省略。ちょちょいのちょい。ソースはGitLabに。

https://gitlab.com/jtagusari/tengungun

目下開発中のプラグインの機能を流用したので，割と簡単にできたのですが，実は点群のインポートで詰まりました。QGISプラグインでは，点群をアウトプットとして使用するために`QgsProcessingParameterPointCloudDestination`という関数が用意されているのですが，これが動作しない！現象としては下記のStackExchangeと全く同じ。そして回答されていない。

https://gis.stackexchange.com/questions/464523/qgis-plugin-how-to-automatically-add-point-cloud-layers-to-qgis-at-the-end-of

仕方がないので，次のように`context`をいじってカレントプロジェクトに強引にレイヤーを追記する方法で対応しました。お作法としては極悪に分類される気もしますが，まあ，そのうち，点群まわりの環境が整理されれば，解決するでしょう。きっと。
```
context.addLayerToLoadOnCompletion(
    pc_projected, 
    context.LayerDetails(
        os.path.splitext(os.path.basename(pc))[0], QgsProject.instance(), 
        ""
    )
)
```

## データの取り込み方（改善版）

次の様に，直感的にVIRTUAL SHIZUOKAのデータをQGISに取り込めるようになりました。

1. QGISを開く
1. 開発したプラグイン（TENGUNGUN）をインストールする
1. OpenStreetMapなどの地図タイルを開く（緯度経度で場所がわかるエスパーなら不要）
1. 点群データを欲しいところに地図を拡大。点群データは300m x 200mグリッドなのでかなり拡大しておいた方が良い。（緯度経度で場所がわかるエスパーなら不要）
1. TENGUNGUNで「点群データグリッド一覧」を実行。ここで範囲を指定する必要があるが，デフォルトなら前の操作で表示した地図の範囲になる。（緯度経度で場所がわか……）
1. 点群データグリッド（300m x 200m）がポリゴンレイヤとしてプロジェクトに追加・表示される。（緯度経……）
1. TENGUNGUNで「点群データの取得」を実行。範囲が指定できるので，ダウンロードしたい点群の範囲より少し小さく指定する。デフォルトでは点群データは一度に１つしかダウンロードできないため。
1. 点群データがダウンロードされ，QGISにレイヤとして追加される。

こうやって書くと面倒くさそうですが，実際には割と簡単です。

https://twitter.com/ra0kley/status/1721869699733221379?t=Vfzl0JTQo7wB7fjcfoslGg&s=19

おめでとう！VIRTUAL SHIZUOKAはQGISに簡単に取り込めるようになったぞ！

## 他の点群データは？

実は，VIRTUAL SHIZUOKA以外への拡張性を考えて，データベースは`json`形式（`pc-databases.json`）で登録してあります。たとえば次のような感じ。

```
[
  {
    "id": "SHIZUOKA_CW_LP_ORIG",
    "description": "LP original data in Central and Western Shizuoka area",
    "description_ja": "LPデータ オリジナルデータ（静岡県 中・西部 点群データ）",
    "url": "https://gic-shizuoka.s3.ap-northeast-1.amazonaws.com/2022/p/LP/LAS/{pcode}.zip",
    "type": "pointcloud",
    "pcode_format": {"level": "500","prefix": "08", "case": "lower"},
    "crs": "EPSG:6676",
    "dx": 400,
    "dy": 300
  },
  ...
]
```

そう，このファイルの`url`とか`pcode_format`をちょっと書き換えるだけで，他のデータベースにも対応できるんですねー。他のオープン点群データ（和歌山とか長崎とか）を見ると，同じように国土基本図図郭コードを使っているようなので，同様にファイルがダウンロードできますね。

しかし，（和歌山とか長崎とかは，）肝心のURLが公開されていない！！

というわけで，対応はお預けとなりました。


と思っていたのですが，VIRTUAL SHIZUOKAみたくURLを公開しているところもあった様で，たとえば東京都のデジタルツインで，この拡張が使える様です。

https://twitter.com/ra0kley/status/1721876653968871666

良いですねー。作った甲斐がありました。

## さいごに

今後のこと（研究で使うつもり）を考えて，プラグインを作りました。使ったらフィードバックを頂ければ幸いです。たとえば，MacOSでpdal動かないケースが報告されています（といっても，これに関しては何に手を付けていいかわからないですが）。

https://twitter.com/takahiro0129/status/1722033495709532448

そもそも，VIRTUAL SHIZUOKAに注目している理由として，点群データの将来性や可能性を感じたため，というのがあります。静岡県に限らず，全国で使いやすいデータベースが整備され，それが利活用されていくことを望みます。

そのためには，QGISに簡単に取り込めることというのが結構重要だとおもっていますし，QGISに簡単に取り込むためにはURLを簡単に取得できないといけないです。今のところ。点群のデータベース整備まわりがどのように進められているのか，私には知る由もありませんが，統一的なルール（たとえば国土基本図図郭コードの利用）でデータの整備が進められ，ダウンロードのためのURLがオープンになることを望みます。


「統一的なルール（たとえば国土基本図図郭コードの利用）でデータの整備が進められ，ダウンロードのためのURLがオープンになることを望みます。」

誰かその手のエライ人に届け！