top of page

アプリを手作りしています

ホーム: ようこそ!
ホーム: Blog2
handmadeapp

[Python]KML to CSV/ KML→CSV変換

Google My Mapsに登録した場所の情報をCSV形式で保存したい、ということがあり、


・KML形式で出力したファイルを読み、

・必要な項目を整理した上で、

・CSV形式に出力する


KML→CSV変換ツールを作成しました。


まず、XML形式のファイルを読み込むのは、xml.etree.ElementTreeを利用することに。

「root.iter('*')」で、全ての要素を順に見ていく。


元のKMLファイルの構造は、


Placemark

 ┗ name

 ┗ description

 ┗ styleUrl

 ┗ Point

  ┗ coordinates


となっており、サンプルとしてはこんな感じ。


CSV変換の要件は、以下の通り。


①KML:<name> → CSV:「name_jp」「name_en」

   ・「日本語-英語」「英語-日本語」「日本語」「英語」の4パターンがある想定

   ・「-」区切りでテキストを分割

   ・分割後、1文字目が半角英数なら「name_en」、そうでなければ「name_jp」

②KML:<description> → CSV:「description」

   ・何も入力がない場合は、空白のまま

③KML:<coordinates> → CSV:「longitude」「latitude」

   ・「,」区切りで入っている1つ目を「longitude」、2つ目を「latitude」へ


KMLファイルの要素を上から順に見ていきながら、

Placemark毎に、Key=CSV項目とするDictionary型の変数に必要な情報をセットし、

次のPlacemarkに進む前にCSVへの書き出す方向で検討。


CSVへの書き込みは、csv.DictWriterで。


<name>と<coordinates>は必ず値が入っており、次の場所の登録時に更新されるので、

CSV書き込み後の placeDictの値のクリアは「description」のみとした。


残りは、KMLから読み込んだ必要項目を「placeDict」にセットする部分のみ。


①KML:<name> → CSV:「name_jp」「name_en」

「-」区切りで分割した文字列を、日/英判定する必要がある。

こちらの記事を参考に、unicodedata.east_asian_widthを利用することに。


②KML:<description> → CSV:「description」

これは簡単で、読み込んだ情報をそのままセットするだけ。


③KML:<coordinates> → CSV:「longitude」「latitude」

「,」区切りで分割した文字列を、一旦「coordArray」に格納し、

1つ目を「longitude」、2つ目を「latitude」へセットする。


コードの全体はこちら。


これで、サンプルのKMLは、以下のCSVに。


閲覧数:1,869回0件のコメント

最新記事

すべて表示

[SwiftUI] Work-Walk Timer - (2) Play Audio

タイマーアプリの続き。 あらかじめ登録した音を再生する機能に着手していきます。 利用する音は2種類。 ①時間が来たことを知らせる、ししおどしの音(From: https://pocket-se.info/) ②休憩時間の間に流す音楽(From:...

Comments


bottom of page