Kanahiro / GSI-VTDownloader

地理院ベクトルタイルをレイヤーとして追加するQGISプラグイン
https://plugins.qgis.org/plugins/GSI-VTDownloader-master/
GNU General Public License v2.0
4 stars 3 forks source link

地物の属性の日本語文字列が正常に読み込まれない #1

Closed Kanahiro closed 4 years ago

Kanahiro commented 4 years ago
スクリーンショット 2020-05-04 22 25 23

2つ以上のタイルを読み込んだ場合、属性データに上記の不具合が発生する。 おそらくsaga:mergevectorlayersの問題かと思われる

Kanahiro commented 4 years ago

本プログラムは①対象エリアのすべてのPBFファイルを取得し②それらをひとつにマージするという手順で処理します。 ②はプロセッシングツールを利用しています。 マージのためのプロセッシングツールには2種類あり、native:mergevectorlayersとsaga:mergevectorlayersです。 前者を使用すれば日本語が化ける心配はありません、が特定の条件下でマージに失敗します。 特定の条件とは「複数のPBFファイル間で、同じ属性カラムに別のデータ型がセットされている場合」です。 PBFファイルを読み込む際(GUI上ででもですが)カラムは「動的に型付け」されます。とあるタイルのPBFのとあるカラムには整数値のみが入っていたので、そのカラムがIntegerと型付けされたとします。このとき、別のタイルのPBFの同じ名前のカラムに整数値以外が入っていると、QGISはこのPBFのカラムはDoubleと型付けされてしまいます。native:mergevectorlayersはこのようなレイヤー同士のマージを許しません(例外をスローします)。

現状のアルゴリズムでは、前述のQGISの仕様を回避する事は出来ません。したがって、方針として①nativeでマージをtryし②例外がスローされた場合sagaでマージする事により、可能な限りnativeでマージする事とします。

以下でコミット済み https://github.com/Kanahiro/GSI-VTDownloader/commit/95719bae7c171c25da4412cf233a75036aa153bc

Kanahiro commented 4 years ago

良い解決策を思いつくまでオープン

Kanahiro commented 4 years ago

https://qgis.org/pyqgis/master/core/QgsField.html?highlight=settype#qgis.core.QgsField.setType このAPIで、すべてのレイヤーの数値カラムを全部doubleにしてからnativeでマージすればよさそう