マイマップで作ったデータ(KML)をCSVに変換する方法

はじめに

マイマップを利用している人はどれくらいいるでしょうか?結構マイナーで使った事が無い方も多いかもしれません。
Googleマップと連携して自分用の地図を作るにはとても便利なサービスですね。以前の記事も良かったら見てください。

しかしデータが多くなってくると整理が大変なんですよね。ということで今回は整理しやすいようにCSV形式にしてしまって、エクセルなどで一覧を見れるように変換する方法をご紹介したいと思います。

実際のプログラム

今回はPythonを利用します。WindowsでPythonの動作環境を作る方法はググれば沢山出てくるので、そちらを参照してください。当ページでは省かせていただきます。

以下をコピペして出来上がり!!

import xml.etree.ElementTree as ET
import csv

tree = ET.parse('sample.kml',)
root = tree.getroot()

placeDict = dict.fromkeys(["Folder","name","description","lat","lng","Address"],"")

outputFileName = "test.csv"
f = open(outputFileName, "w",encoding="utf-8-sig",newline="")
w = csv.DictWriter(f, placeDict.keys())
w.writeheader()

fflg = 0
for line in root.iter('*'):

    #Folder
    if line.tag == '{http://www.opengis.net/kml/2.2}Folder':
        fflg = 1

    #name
    if line.tag == '{http://www.opengis.net/kml/2.2}name':
        sName = line.text or ""
        sName = sName.replace('\n', '').strip()

        if fflg == 1:
            placeDict["Folder"] = sName.replace('\n', '')
            fflg = 0
        else:
            placeDict["name"] = sName.replace('\n', '')

    #description 
    if line.tag == '{http://www.opengis.net/kml/2.2}description':
        sDesc = line.text or ""

        if sDesc[-14:]=='Visit history:':
            sDesc = sDesc.replace('Visit history:', '')

        if sDesc[-12:]=='DayOff Info:':
            sDesc = sDesc.replace('DayOff Info:', '')


        placeDict["description"] = sDesc

    #coordinates
    if line.tag == '{http://www.opengis.net/kml/2.2}coordinates':
        coordArray = line.text.split(",")
        lan = coordArray[0].replace('\n', '').strip()
        lat = coordArray[1].replace('\n', '').strip()
        placeDict["lng"] = lan
        placeDict["lat"] = lat
        placeDict["Address"] = f"https://www.google.com/maps/search/?api=1&query={lat},{lan}"
        w.writerow(placeDict) 
        placeDict["description"] = ""

f.close()

先人が既にプログラムを作っていたので、それをさらに改良した形になっています。
ポイントは2つですね。

1.フォルダの出力
マイマップは、レイヤーが追加できます。今回のプログラムはレイヤーで分けているものも、区別できるように出力しています。

2.Googleのアドレス
データを見るだけだと、どこのデータか分からないことがあるので、すぐに確認できるようにGoogleMapのアドレスを自動生成しています。

まとめ

いかがだったでしょうか?あまり需要の無いプログラムかもしれませんが、誰かの役に立てばと願っています!!

IT

Posted by スングル