GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

Python で緯度経度を地域メッシュコードに変換する方法

明けましておめでとうございます。

昨年は一昨年に続き変化の多い年でした。新しい分野に挑戦することになり四苦八苦していますが、頑張ろうと思います。

さて、本日は Python で緯度経度を地域メッシュコードに変換してみようと思います。以下のエントリーで地域メッシュコードを緯度経度に変換する方法を紹介していますが、今回についてその逆を紹介します。

www.gis-py.com

地域メッシュとは

前回エントリーに記載しましたので、こちらを参照してください。

www.gis-py.com

やり方

地域メッシュの考え方が以下のサイトで公開されています。これを参考にしてコードを作ってみようと思います。

https://www.stat.go.jp/data/mesh/pdf/gaiyo1.pdf

以下にサイトの画面ショットをのせておきます。

f:id:sanvarie:20210107211517p:plain

f:id:sanvarie:20210107211554p:plain

使用する緯度経度

こちらで取得したJR蒲田駅の緯度経度を使用したいと思います。なぜ蒲田かは秘密です。

緯度:35.562479
経度:139.716073

f:id:sanvarie:20210107211845p:plain

蒲田駅の地域メッシュコードをESRIジャパンさんが公開しているデータで確認してみます。

1次メッシュ:5339
2次メッシュ:533925
3次メッシュ:53392577

ということがわかりました。

f:id:sanvarie:20210107212512p:plain

実行環境

Windows 10
Python 3.6.6

サンプルコード

1~3次メッシュまで対応させたサンプルコードを作成しました。

# -*- coding: utf-8 -*-
def latlon2mesh(lat, lon):
    #1次メッシュ上2けた
    quotient_lat, remainder_lat = divmod(lat * 60, 40)
    first2digits = str(quotient_lat)[0:2]

    #1次メッシュ下2けた
    last2digits = str(lon - 100)[0:2]
    remainder_lon = lon - int(last2digits) - 100

    #1次メッシュ
    first_mesh = first2digits + last2digits

    #2次メッシュ上1けた
    first1digits, remainder_lat = divmod(remainder_lat, 5)

    #2次メッシュ下1けた
    last1digits, remainder_lon = divmod(remainder_lon * 60, 7.5)

    #2次メッシュ
    second_mesh = first_mesh + str(first1digits)[0:1] + str(last1digits)[0:1]

    #3次メッシュ上1けた
    first1digits, remainder_lat = divmod(remainder_lat * 60, 30)

    #3次メッシュ下1けた
    last1digits, remainder_lon = divmod(remainder_lon * 60, 45)

    #3次メッシュ
    third_mesh = second_mesh + str(first1digits)[0:1] + str(last1digits)[0:1]

    print("1次メッシュ:" + first_mesh)
    print("2次メッシュ:" + second_mesh)
    print("3次メッシュ:" + third_mesh)

if __name__ == '__main__':
    latlon2mesh(35.7007777, 139.71475)

結果を確認すると想定通りの地域メッシュコードを取得することができました。

1次メッシュ:5339
2次メッシュ:533925
3次メッシュ:53392577

f:id:sanvarie:20210107213306p:plain

さいごに

「緯度経度を地域メッシュコードに変換」と聞くとなんとなく難解そうな気がしますが、コードにするととても短くシンプルなプロセスということがわかるかと思います。地域メッシュコードは GIS の世界ではよく使用するものなので、今まで聞いたことなかったという方はぜひ色々調べてみてください。本年もよろしくお願いします。