ちょっと、CSV のデータから KML ファイルを作成してみます。
- KML チュートリアル - code.google.com
- KML Interactive Sampler - kml-samples.googlecode.com
CSV ファイルから KML に変換するスクリプト
Python でスクリプトを書いておきます。
KML ファイルのテンプレートを用意する
Jinja2 を使ったテンプレートだと次のように記述できます。 名前と緯度経度が必須で、説明文がある場合はそれも出力します。
TEMPLATE = u"""<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2">{% for point in points %} <Placemark> <name>{{ point.name }}</name> {% if point.description %} <description>{{ point.description }}</description> {% endif %} <Point> <coordinates>{{ point.longitude }},{{ point.latitude }}</coordinates> </Point> </Placemark> {% endfor %} </kml>"""
CSV ファイルを読み込む
次のフォーマットの CSV ファイルについて考えます。 1行目はヘッダー行で固定とし、2行目以降に同じ並びでデータが続きます。
name,longitude,latitude,description 国立霞ヶ丘競技場,139.714941,35.678160,naash.go.jp ... 同じ形式でデータが続く ...
簡単のために、区切り文字以外にカンマは存在しない、と仮定しておくと、 次のようなコードで処理できます。
def process(self, reader): header = reader.next().strip().split(',') points = [] for line in reader: r = line.strip() if not r: continue row = r.split(',') data = dict(zip(header, row)) points.append(data) self.rederer.render(points)
エクセルの CSV と互換性がないとか、ダブルクォートの処理がどうのという話もありますが、 CSV ファイルを真面目に扱うと奥が深いのでやめておきます。
ファイルにまとめる
引数処理や入出力のエンコーディング処理を追加して、ファイルにまとめておきます。
- csv2kml.py - github.com
入力ファイル
$ cat sample.csv name,longitude,latitude,description 国立霞ヶ丘競技場,139.714941,35.678160,naash.go.jp
実行結果
$ python csv2kml.py sample.csv INFO:root:Start processing: sample.csv <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark> <name>国立霞ヶ丘競技場</name> <description>naash.go.jp</description> <Point> <coordinates>139.714941,35.678160</coordinates> </Point> </Placemark> </kml> INFO:root:End processing: sample.csv
ヘルプ表示
$ python csv2kml.py -h Usage: python csv2kml.py [options] file1 [file2 [ ... ]] Convert CSV file into KML format. See KML Tutorial <http://code.google.com/intl/ja/apis/kml/documentation/kml_tut.html> Input file must contain following header line: name,longitude,latitude,description Options: -h, --help show this help message and exit -f FILE, --file=FILE setting file -o FILE, --out=FILE output file --basedir=BASEDIR base directory --input-encoding=ENC_IN encoding of input source --output-encoding=ENC_OUT encoding of output destination -v, --verbose verbose mode -q, --quiet quiet mode
Google Maps で読み込む
Google Maps には、ローカルファイルシステムから KML をアップロードする方法と、 任意の URL のファイルを読み込む方法が用意されています。 Dropbox のパブリックフォルダなどに KML を置くことで、URL から読み取れるようになります。
終わりに
CSV のデータから KML ファイルを作成しました。 Google Maps と Google Earth は KML を読み取って地点情報などを表示できます。 何となく地球の地点情報を火星にマッピングしてみると楽しいかもしれません。 まぁ、誰得な話でもでもありませんが。。
KML には Google の拡張もあり、Google Earth ではツアー機能もありますので、 気が向いたら使ってみようかなぁ、と思いました。
あと、Google Earth で緯度経度表示の単位を変更するには、 設定画面から選択できるようです。 度分秒からの表示を変更したい場合に便利です。
0 件のコメント:
コメントを投稿