はじめに
友人などに,場所を教えたいときなどに,Google Earth 上にマークしたものを渡せれば都合が良い.
この時,地点数が少なければ,座標値と場所名を直接伝えて自分で探してもらえればいいのだが,地点数が多くなるととたんに面倒になる.
この伝達作業をスムースに行うため,どうしたらよいか調べてみた結果,kml というものがあることを知った.
kml ファイルを作っておくと,これをダブルクリックすれば,Google Earth が立ち上がり周辺を示してくれて,便利.
ここで問題となるのが,kml ファイルの作り方である.調べた結果,Python の simplekml というモジュールを使うと楽にできることがわかった.
ここでは,simplekml を使って kml を作成するプログラム例を示す.
私の環境は以下の通り.Python3 と Google Earth Pro がインストールされている必要がある.
- MacBook Pro (Retina, 13-inch, Mid 2014)
- Python 3.6.4
- Google Earth Pro 7.3.0.3832 (64-bit)
simplekmlをインストール
まずは,pip により,simplekml をインストールする.
pip3 install simplekml
元データファイルの作成
元データファイルの例を以下に示す.
DMS-N,DMS-E,Location
3 09 02.96,101 42 42.15,"Wisma Cosway"
3 11 11.00,101 39 50.00,"Segambut station"
3 06 14.55,101 38 43.12,"Taman Jaya station"
3 09 47.32,101 39 16.61,"Mont Kiara"
3 04 24.99,101 35 14.70,"Subang Jaya Ss 15"
3 08 03.41,101 41 10.17,"KL Sentral"
- データは,CSV形式とする
- 1行目はコメント行
- 1列目は緯度,2列目は経度,3列目は名前(地点名)である
- 緯度・経度は,度分秒(DMS)で空白区切りで入力する.自分がGoogle Earthを見ながら座標を拾う時,この並びが便利なため.
- このデータ並びとすることにより,Google Earth からこのファイルを直接インポートしてプロットさせることも可能.
プログラム例
- kmlへの基本的な入力情報は,名前(例えば場所名)・経度データ・緯度データである(元データファイルと緯度・経度の並びが逆なことに注意).
- 経度・緯度データは,小数点表示にしておく必要がある.
- Google Earthで表示するときの文字の大きさや色,プロット記号などを指定できる.
- プロット記号の url は,データのプロパティを見るとプロット記号が指定できるようになっており,その中から好みのものを選ぶ.
デフォルトは黄色いピン.
プログラム例を以下に示す.
# モジュールのインポート
import csv # データ入力用
import simplekml # kmlファイル作成用
# 入力ファイル名・出力ファイル名指定
fnameR='sample.csv'
fnameW='sample.kml'
# リストの宣言
sname=[]
xxx=[]
yyy=[]
# データ読み込み
f=open(fnameR,'r')
reader=csv.reader(f)
header=next(reader)
# 読み込んだデータの処理
for row in reader:
text=row[0] # latitude(緯度データの処理)
text=text.split()
dd=float(text[0])
mm=float(text[1])
ss=float(text[2])
ddd_N=dd+mm/60+ss/3600
text=row[1] # longitude(経度データの処理)
text=text.split()
dd=float(text[0])
mm=float(text[1])
ss=float(text[2])
ddd_E=dd+mm/60+ss/3600
sname=sname+[row[2]] # 場所データ格納
xxx=xxx+[float(ddd_E)] # 経度データ格納
yyy=yyy+[float(ddd_N)] # 緯度データ格納
f.close()
# kmlファイルの作成と書き込み
kml = simplekml.Kml() # kmlファイルの宣言
for ss,xx,yy in zip(sname,xxx,yyy):
pnt=kml.newpoint(name=ss) # name:場所データ
pnt.coords=[(xx, yy)] # coords:経度・緯度データ
pnt.style.labelstyle.scale = 1.5 # name 表示テキストの大きさ指定(周りの文字より大きくする)
pnt.style.labelstyle.color = simplekml.Color.cyan # name 表示色を cyan に指定
pnt.style.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/paddle/ylw-circle.png' # プロット記号を黄色い丸に指定
kml.save(fnameW) # kmlファイル書き出し
上記プログラムを実行すると sample.hml というテキストファイルが出来上がり,ダブルクリックすると Google Earth が立ち上がり,地点を表示してくれる.
参考にしたサイト
- https://qiita.com/tomo001/items/b375e5fa578eb8880662
- http://simplekml.readthedocs.io/en/latest/geometries.html
以 上