Closed Kanahiro closed 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
良い解決策を思いつくまでオープン
https://qgis.org/pyqgis/master/core/QgsField.html?highlight=settype#qgis.core.QgsField.setType このAPIで、すべてのレイヤーの数値カラムを全部doubleにしてからnativeでマージすればよさそう
2つ以上のタイルを読み込んだ場合、属性データに上記の不具合が発生する。 おそらくsaga:mergevectorlayersの問題かと思われる