kml形式ファイルとpoly形式ファイルを相互変換する方法について覚え書きです。
環境
動作環境は以下のとおりです。変換にはGDALとpythonが必要になるので無い場合はインストールが必要です。
- CPU:Core i5-4670 @3.4GHz
- Memory:32GByte
- Storage:64GByte(SSD) + 2TByte(HDD)
- OS:Ubuntu18.04(64bit)
ソフトウェア
- GDAL 2.2.3
- Python 2.7.15rc1
- ogr2poly.py
変換方法を探す
変換手段が見つからない
ネットの情報を漁ってみても、どうにもkmlとpolyを相互に変換する方法が見つかりません。
やっと見つけたのがこちらでogr対応フォーマットをpolyに変換するスクリプトです。ただ相互変換が出来ないのと、google my mapからエクスポートしたkmlは変換出来ませんでした。あまり需要も無いのかアップデートもされていません。
- MarkCupitt/ogr2poly.py - GitHub
https://github.com/MarkCupitt/ogr2poly.py
既存スクリプトを修正して解決
しかし、諸事情でpolyからkmlに変換したい案件が出てきたので上記のスクリプトを少し改造させてもらうことにしました。改造したスクリプトは以下のプロジェクトにあります。
- suke-blog/ogr2poly.py
https://github.com/suke-blog/ogr2poly.py
機能としては、
- Google kmlへの対応
- polyからkmlへの簡易変換機能
の2つを追加しました。簡易変換なのは、これでpoly -> kml変換したファイルはgoogle my mapだとエラーが出て読み込めないからです。多分何か情報が足りてないのだと思いますが、QGISでは問題なく読み込めました。
$ git clone https://github.com/suke-blog/ogr2poly.py $ cd ogr2poly.py $ python ./ogr2poly.py Usage: ogr2poly.py [options] src_datasource_name [layer] Options: -h, --help show this help message and exit -p OUTPREFIX, --prefix=OUTPREFIX Text to prepend to POLY filenames. -b BUFFERDISTANCE, --buffer-distance=BUFFERDISTANCE Set buffer distance in meters (default: 0). -s SIMPLIFYDISTANCE, --simplify-distance=SIMPLIFYDISTANCE Set simplify tolerance in meters (default: 0). -f FIELDNAME, --field-name=FIELDNAME Field name to use to name files. -k, --convert-poly2kml Convert poly to kml. -v, --verbose Print detailed status messages. Usage: ogr2poly.py [options] src_datasource_name [layer]
使い方は単純で変換したいファイルを引数で指定するだけです。poly -> kml変換のときはオプション"-k"を追加してください。
#kml -> poky変換 $ python ../ogr2poly.py ./Japan_Kanto_Tokyo.kml #poly -> kml変換 $ python ../ogr2poly.py -k ./Japan_Kanto_Tokyo.poly
所感
またまた需要のなさそうなプログラムですが、geofabrikなどで配布されているpolyファイルをQGISで読み込みたいときに重宝しています。