GIS奮闘記

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

スポンサーリンク

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

最近は ArcGIS API for JavaScript の話が続いてしまっていたので、今回は気分を変えて Python を使って地域メッシュコードを緯度経度に変換してみようと思います。

地域メッシュとは

地域メッシュ(ちいきメッシュ)とは、統計に利用するために、緯度・経度に基づいて地域をほぼ同じ大きさの網の目(メッシュ)に分けたものである。メッシュを識別するためのコードを地域メッシュコードと言う。(地域メッシュ - Wikipedia

地域メッシュは区分の方法により、大きさの異なるいくつかの区画が定められています。

・1次メッシュ: 一辺約80km.
・2次メッシュ: 一辺約10km. 1次メッシュを縦横8分割したもの。
・3次メッシュ: 一辺約1km. 2次メッシュを縦横10分割したもの。
・4次メッシュ: 一辺約500m. 3次メッシュを縦横2分割したもの。
・5次メッシュ: 一辺約250m. 4次メッシュを縦横2分割したもの。
・6次メッシュ: 一辺約125m. 5次メッシュを縦横2分割したもの。

ESRIジャパンさんが詳しく説明してくれているので、気になる方はぜひ以下を読んでみてください。

標準地域メッシュ | ESRIジャパン

実行環境

Windows 10
Python 3.6.6

地域メッシュから緯度経度を割り出すサンプルコード

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

def get_latlon(meshCode):

    # 文字列に変換
    meshCode = str(meshCode)

    # 1次メッシュ用計算
    code_first_two = meshCode[0:2]
    code_last_two = meshCode[2:4]
    code_first_two = int(code_first_two)
    code_last_two = int(code_last_two)
    lat  = code_first_two * 2 / 3
    lon = code_last_two + 100

    if len(meshCode) > 4:
        # 2次メッシュ用計算
        if len(meshCode) >= 6:
            code_fifth = meshCode[4:5]
            code_sixth = meshCode[5:6]
            code_fifth = int(code_fifth)
            code_sixth = int(code_sixth)
            lat += code_fifth * 2 / 3 / 8
            lon += code_sixth / 8

        # 3次メッシュ用計算
        if len(meshCode) == 8:
            code_seventh = meshCode[6:7]
            code_eighth = meshCode[7:8]
            code_seventh = int(code_seventh)
            code_eighth = int(code_eighth)
            lat += code_seventh * 2 / 3 / 8 / 10
            lon += code_eighth / 8 / 10

    print(lat, lon)

if __name__ == '__main__':
    get_latlon(52396594)

例えば、52396594 を引数にして実行すると「35.24166666666667 139.675」という形で緯度経度を取得することができます。これがどこかといいますと、横須賀のとある地域ですね。

f:id:sanvarie:20200229221902p:plain

それではこの結果が本当に正しいか確認してみます。以下のサイトで地域メッシュコードの一覧を入手することができます。

統計局ホームページ/市区町村別メッシュ・コード一覧

地名までは載っていないのですが、52396594 は横須賀市ということがわかります。

f:id:sanvarie:20200229222512p:plain

意外と簡単に地域メッシュコードを緯度経度に変換することができるということがわかりました。今度は地域メッシュコードからその範囲のポリゴンを作成させたり、あとは、緯度経度から地域メッシュコードに変換したりしてみたいですね。本日は以上です。