KML出力時に経度を0-360度に変換

364 views
Skip to first unread message

ikko.s...@gmail.com

unread,
Mar 12, 2019, 7:58:16 PM3/12/19
to QGIS初心者質問グループ
QGIS3.6
ArcGIS Map Server の地図を読み込みkmlで出力しました
CRS EPSG3994
KML出力範囲 S30 - S50, E150 - W70

東経0から180度 西経0からマイナス180度で出力されます。
これを0から360に変換したいのでQGISからKML出力時に西経マイナスの時は+360度加える処理を加えたいのですが方法が分かりません。

出力されたKMLファイルをあとから直接エディタで編集しているのですがマップの数が多いのでQGISで出力する時点で変更を加えたい次第です。
どなたかアドバイス頂けないでしょうか?

adachi

unread,
Mar 12, 2019, 9:33:35 PM3/12/19
to QGIS初心者質問グループ
体系的に地理学を修めたわけではないので想像も入ってしまいますが、
経度をグリニッジ子午線を中心として「東経、西経」あるいは「+、ー」と表現するのは世界的な取り決めであって
したがって経度が180度を超えることは有り得ず、ソフト側で何かできることではないような気がします。

0~180、0~ -180で出力された時に具体的にどうお困りなのか記述いただくと、何か対策があるかもしれません。
Message has been deleted
Message has been deleted

ikko.s...@gmail.com

unread,
Mar 12, 2019, 11:15:58 PM3/12/19
to QGIS初心者質問グループ
>adachi 様
添付したスクショが上手くいかずこちらに返信投稿し直します。


出力されたKMLファイルの
<Polygon>
 <outerBoundaryIs>
    <LinearRing>
       <coordinates>
   緯度,経度,0 緯度,経度,0
   数千~1万地点
       </coordinates>
    </LinearRing>
 </outerBoundaryIs>
</Polygon>

において、QGISで出力したKMLファイルをそのまま Google Earth と社内の別マッピングソフトで表示した際に180度を超えて-175 といった地点があると最短ラインではなく地球を半周以上してしまいます。

下図Google Earth に取り込んだ場合です。
上が 170,-10,0 -170,-10,0 -170,-28,0 170,-28,0 170,-28,0 170,-10,0
 (図内で上の帯状 170度から-170度に線を描こうと遠回り)
下が170,-30,0 190,-30,0 190,-40,0 170,-40,0 170,-30,0 190,-30,0
 ※170度から190度で領域指定したKMLファルでは意図下通りに描かれる



ちなみに同じファイルをGoogle Earth "Pro"に取り込んだ場合はきちんと意図した範囲で描いてくれます。
170度から-170度の四角も170度から190どの四角もきちんと意図通りに描いてくれます。




Google Earth と社内ソフトできちんと表示するために-170度 を 190度に変えていましたが、数百のKMLファイルとその中に20-100ほどplacemarkがありさらに登録地点は各数100から数千なのでQGISで出力時に設定できないものかと質問させて頂きました

adachi

unread,
Mar 13, 2019, 1:21:27 AM3/13/19
to QGIS初心者質問グループ
たしかに、仰るような現象が再現できました。
Google Mapのマイプレイス→マイマップへのKML読み込みではちゃんと表示されるようですが、地物数上限が1000個なので厳しい、ということですよね。

QGISでの操作について、やや手順を踏みますが、なんとなくできそうでしたので紹介します。
QGISネイティブの「エクスポート」→「地物を保存」ではうまくいかないので
「カスタム座標系」と「MMQGISプラグイン」を組み合わせて操作します。

1. メニューの「設定」→「カスタム座標系」から「+」ボタンで新しい座標系を作成、名称は適当に設定します(今回は「NZ_trial」とします)。

2. 「パラメータ」の白枠の右側にあるコピーマークをクリック

3. 既定の座標系から「WGS 84(EPSG:4326)」を選択 → OK

4. WGS84のパラメータがコピーされるので、ここに「+lon_wrap=180」と書き加える(以下の画像の状態)→ OK



5. 最終的にKMLとして出力したいレイヤを右クリック → エクスポート → 地物の保存 で新しく保存(shapeやgeopackageなどなんでもよい)
 この時、CRSとして先ほど作成したNZ_trialを選択します。「保存されたファイルを地図に追加する」にチェックしておきます。

6. 上の手順でCRS変換したデータを、MMQGISプラグインの「Google Maps KML Export」の機能でエクスポート

7. Google Earthに載ってくれます




ひとつ懸念があるのは、MMQGISプラグインのKML変換に地物数の上限があるかも?というところです。
今回はすみませんがそこまで検証できておりません...

adachi

unread,
Mar 15, 2019, 1:03:49 AM3/15/19
to QGIS初心者質問グループ
直接メールから返信いただいたようで、私宛に来ていたので以下転載します。

ご指摘のように、ArcGISのFeature Serverから読み込んだデータを手順に沿って「GeoPackage」に一旦出力してからエクスポートしようとすると
「よくわからんジオメトリだ」とプラグインに怒られました。
これを、

・GeoPackageでなくShape形式にする
・KMLエクスポートのときの「Description Separator」の設定を「Field Names」とする

ことで、KMLに出力できました。
MMQGISプラグイン自体がだいぶ前のバージョンのQGISからあるので、GeoPackageよりShapeとの親和性が高いのかもしれません。

あるいは全く異なるエラーかもしれませんが、何かご参考になればと思います。



---------以下転送-----------
adachi 様
ありがとうございます。
自分で作成した簡単なサンプルレイヤーで教えて頂いた通りの結果が得られました。

カスタム座標はいろいろ試していたのですが、プラグイン経由で上手く出力できるとは。。。
ただ肝心のサーバーマップ読み込んで処理するとMMQGIS からKML出力する際にオブジェクトエラーを吐いてしまいます。
もう少し試行錯誤してみます。

とても参考になりました、ありがとうございます。

ikko.s...@gmail.com

unread,
Mar 20, 2019, 10:59:20 PM3/20/19
to QGIS初心者質問グループ
ありがとうございます。
ズバリご回答頂き本当に助かりました

・GeoPackageでなくShape形式にする
・KMLエクスポートのときの「Description Separator」の設定を「Field Names」とする

これで無事にMMQGIS経由して0-360経度でKML出力できました
Reply all
Reply to author
Forward
0 new messages