WEBサービス

Googleスプレッドシートで住所から緯度経度を取得する方法

Googleスプレッドシートで住所から緯度経度を取得する方法

住所情報を緯度経度に変換したいけどやり方がわからない…


現実世界の情報のひとつ「住所」。

人や建物の場所を把握するのに便利な情報ではあり、Excelやスプレッドシートやデータベースなどで管理されていることもある。

しかし住所はテキスト情報なので地図上のどこなのかわかりづらい

システム的に場所を扱うには緯度経度情報の方が扱いやすい。


では住所から緯度経度を知るにはどうしたらいいのか。

スプレッドシートで管理されている住所情報を緯度経度情報に変換することはできるのか。

そこで今回はGoogleスプレッドシートで住所から緯度経度を取得する方法について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

Googleスプレッドシートで住所から緯度経度を取得する方法がわかり、位置情報データの扱いが得意になる。


Googleスプレッドシートで住所から緯度経度を取得する方法

Googleスプレッドシートで住所から緯度経度を取得するにはどうしたらいいのか。


シート上の住所を使って緯度経度を取得するのに便利な方法はコレ。

ココがポイント

  • APIに住所を投げて緯度経度を取得する


スプレッドシートには住所を緯度経度に変換する機能は無い。

しかし住所から緯度経度を出せるサービスは存在する。

であれば外部のサービスに「住所を渡して緯度経度を返してくれる機能」があれば結果を取得して表示できる。


でも住所から緯度経度に変換するサービスなんてあったっけ?



住所から緯度経度に変換するサービス

住所から緯度経度に変換するサービスはある。

有名どころはGoogle Mapsだろう。

しかしAPIキーの設定など設定があるので、今回は別のAPIを紹介する。


今回紹介するのは国土地理院のAPI

URLパラメータの q= の後ろに住所テキストを設定すると、jsonの結果を返してくれる。


↑のURLにアクセスすると↓のような結果が得られる。

結果

[{"geometry":{"coordinates":[139.745468,35.658649],"type":"Point"},"type":"Feature","properties":{"addressCode":"","title":"東京都港区芝公園四丁目2番"}}]


"coordinates":[139.745468,35.658649] の部分が緯度経度情報となる。

ではこの結果をスプレッドシートに反映してみよう。



APIの結果をスプレッドシートに反映する方法

APIの結果をスプレッドシートに反映するには以下の手順で行う。

ポイント

  • APIに投げるURLの作成
  • JSONを読み込むユーザー定義関数をスプレッドシートに組み込む
  • APIの結果JSONを読み込む
  • カンマ区切り緯度経度を分割

  • 順に説明する。



    データ準備

    まずはデータ準備ということで、以下のように適当に住所リストを用意する。


    住所
    東京都港区芝公園4丁目2−8
    東京都墨田区押上1丁目1−2
    東京都台東区浅草2-3-1




    APIに投げるURLの作成

    住所が用意できたら、APIに渡すURLの形に加工する。

    以下の式をB列に設定するとURLとなる。


    ="https://msearch.gsi.go.jp/address-search/AddressSearch?q=" & A2
    



    APIに渡すURL


    これを読み込ませたいが、JSONをスプレッドシートに取り込む機能が必要になる。



    JSONを読み込むユーザー定義関数をスプレッドシートに組み込む

    ここでシートへの入力から一旦離れて、JSONをスプレッドシートに取り込む機能を追加する。

    ImportJSON という関数を作ってくれた方がいるので、それを使わせてもらう。


    まず以下のページでコードをコピーして、


    スプレッドシートのメニューから 拡張機能 -> Apps Script を選んでApps Scriptのページを開く。


    拡張機能 -> Apps Script


    そしてコピーした中身を貼り付けて保存する。


    Apps Script保存


    これで ImportJSON を関数として利用可能になった。



    APIの結果JSONを読み込む

    ImportJSON が関数として利用可能になったので使って緯度経度情報を抽出する。

    今度は以下の式をC列に設定する。


    =ImportJSON(B2, "/geometry/coordinates", "noInherit,noTruncate,noHeaders")
    


    2つめの引数 "/geometry/coordinates" はクエリであり、抽出する対象を緯度経度(coordinates)に絞っている。

    2つめの引数 "noInherit,noTruncate,noHeaders" はオプション設定で、ヘッダーなど出力しないようにしている。

    結果としては以下のようになる。


    ImportJSONの結果


    緯度経度を抽出できたが緯度と経度が結合してしまっているので、分離する必要がある。



    カンマ区切り緯度経度を分割

    緯度と経度が結合してしまっているので、分離するには split() を用いる。


    D列に以下の数式を入力する

    =SPLIT(C2,",",true,true)
    


    するとカンマ , を境に値が分割される。


    これで住所から緯度経度を取得することができた。



    まとめ

    今回はGoogleスプレッドシートで住所から緯度経度を取得する方法について解説した。

    シート上の住所を使って緯度経度を取得するのに便利な方法はコレ。

    ココがポイント

    • APIに住所を投げて緯度経度を取得する


    有名なのは国土地理院のAPIで、APIの結果をシートに反映するには以下の手順で行う。

    手順

  • APIに投げるURLの作成
  • JSONを読み込むユーザー定義関数をスプレッドシートに組み込む
  • APIの結果JSONを読み込む
  • カンマ区切り緯度経度を分割

  • 外部API使えると便利だね!
    今回はImportJSONを使いましたが、XMLを返すAPIの場合は ImportXML の関数がデフォルトで用意されているのでそちらを使うといいですね




    他にもスプレッドシートの記事もあるので、もし気になるものがあれば見てみて欲しい

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    -WEBサービス
    -,

    © 2022 ITips