Google スプレッド シートで住所→緯度経度変換


Googleスプレッドシートで住所→緯度経度変換の逆ジオコーディング(リバースジオコーディング)してみました。

こちらの記事を参考にさせていただきました。
Excel の WEBSERVICE 関数でジオコーディング

1. 手順

ジオコーディング用の URL を設定

セル B1 に以下の式を入力します

URLの構築.
="https://geocode.csis.u-tokyo.ac.jp/cgi-bin/simple_geocode.cgi?charset=UTF8&addr=" & A1

入力するとセルに以下のような URL が表示されるはずです。

https://geocode.csis.u-tokyo.ac.jp/cgi-bin/simple_geocode.cgi?charset=UTF8&addr=%E6%84%9B%E7%9F%A5%E7%9C%8C%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%B8%82%E5%AE%88%E5%B1%B1%E5%8C%BA

実際にこの URL にアクセスすると、以下のような XML が表示されるはずです。

XML を取得

セル C1 に以下の式を入力します。

XMLの取得.
=IMPORTXML(B1,"/")

取得した文字列を分割

セル D1 に以下の式を入力します。

文字列を分割.
=SPLIT(C1," ",true,true)

それぞれのセルに住所や緯度経度らしき数値が設定されていたら成功です。

2. 解説

上記の手順では3つの関数を使用しています。

IMPORTXML(URL, XPath クエリ)

XML、HTML、CSV、TSV、RSS フィード、Atom XML フィードなど、さまざまな種類の構造化データからデータをインポートします。

  • URL - 検証するページの URL です。プロトコル(http:// など)も含めます。

    • URL の値は二重引用符で囲むか、適切なテキストを含むセルへの参照にする必要があります。
  • XPath クエリ - 構造化データで実行する XPath クエリです。

SPLIT(テキスト, 区切り文字, [各文字での分割], [空のテキストを削除])

xml 文字列に対して xpath で検索を実施して返す関数です。

  • テキスト - 分割するテキストです。

  • 区切り文字 - テキストを分割するために使用する文字です。
    デフォルトでは、区切り文字の各文字が個々に検証されます。たとえば、区切り文字に "the" を指定した場合、テキストは "t"、"h"、"e" の文字の前後で分割されます。各文字での分割を FALSE に指定すると、この動作をオフにできます。

  • 各文字での分割 - [省略可 - デフォルトは TRUE] - 区切り文字に含まれる各文字の前後でテキストを分割するかどうかを指定します。

  • 空のテキストを削除 - [省略可 - デフォルトは TRUE] - SPLIT の結果から空のテキスト メッセージを削除するかどうかを指定します。デフォルトは TRUE で、連続する区切り文字を 1 つの区切り文字として扱います。FALSE にすると、連続する区切り文字の間に空のセルの値が追加されます。

3. まとめ

  • IMPORTXML 関数と CSISシンプルジオコーディング実験のAPIを使うことで、Google スプレッド シート上でマクロを使わずにジオコーディングを行う方法を紹介しました。
  • クエリーを実行する際には都道府県市区町村名の補完を忘れずに。ローカル地名だけではバッティングが多発します。

ちなみにサンプルはこちらにおいておきます。