Google Apps Scriptでマイマップデータを取得する【GAS】

以前、Google Apps ScriptでスプレッドシートデータをGoogle Earthからのリクエストに応じてネットワークリンクを生成しデータを返す仕組みを作りました。一方、GoogleマイマップはKMLを出力出来るのですが、マイマップデータのバックアップを取りたいと思っても、KML出力しか無い為、データで管理したい場合、ちょっと困ります。

ということで、今回は逆パターンのマイマップのデータをスプレッドシートに書き出して管理する手法をまとめました。

Google Apps Scriptでマップ作成とKML生成【GAS】

今回利用するスプレッドシート

今回は昔作ったマイマップデータを取得してスプレッドシートに出力します。KMZ形式で取得した場合は、一旦解凍して中に入ってるdoc.kmlを取得する必要があるため、今回は手軽なKML形式の方で取得します。

KMZ形式の場合独自アイコン等も取得出来るので個人的にはオススメですが、もしKMZでやりたい人はZIP解凍の手法も合わせてコードに取り込むと良いでしょう。

Google Apps ScriptでZIP圧縮・解凍をやってみる【GAS】

事前準備

公開設定

Google Apps Scriptで取得するにはマイマップは公開状態にしておく必要があります。地図の共有ボタンをクリックして、「このリンクを知っている人なら誰でも表示できる」という状態にしておきましょう。

図:共有設定を公開にしておく

直リンクを取得する

直リンクを取得するのが大きな問題点。以下の手順で取得します。

  1. マイマップ項目のURLを全て取得する
  2. URLの中にあるmid=の文字列を取得する
  3. 「https://www.google.com/maps/d/u/0/kml?hl=ja&mid=」に2.の値をつなげる(cid以下は不要)
  4. 3.のURLに&forcekml=1を付け加える。これでKML形式で出力になります。完成形は以下の通り

これでKMLへの直リンクを取得が出来ました。

図:KMLからURLを取得することも出来る

ソースコード

KMLをパースするコード

KMLはXMLそのものなのですが、XMLServiceでパースが出来るものの扱いにくいので、以前XMLをJSONに変換するコードを記述しましたがこれを使ってJSONに変換してあげてからだとGASでは操作しやすいです。

Google Apps ScriptでXMLをよしなに扱う方法【GAS】

データを出力するコード

JSON変換したデータを元にスプレッドシートに出力します。今回はStyle部分は特に触っていませんが、アイコンだったり色だったりとCSS的な役目を担っている部分なので、必要であればこれも取得して出力しておくと良いでしょう。

前述の事前準備で取得しておいたKMLへの直リンクのURLを記述しておきましょう。JSONファイルを出力するフォルダのIDも指定しておきます。

  • ファイル名は日付とKMLの拡張子をつけて保存するようにします。
  • XML2JSONでFolder項目以下にデータが集められてるのでelement変数に取得しておきます。
  • 値が存在しない場合に備えてdescriptionやextendeddataについてはエラートラップを掛けておきます。
  • pointは緯度経度データですが改行コードやスペースなどが混じってるのでこれらを除去するようにしています。
  • Folder項目は配列で、各レコードにフォルダ名とPlacemarkの塊が入ってるのでそれぞれ取り出し、書き込み用配列を作ります
  • 最期に一括で書き出しを行います。
  • KMLのまま出力する場合は、var blob = response.getBlob().setName(dateman + ".kmz");で保存が可能です。

図:キレイに取得できました。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。