5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-14

【追記2021/01/21】1/2メッシュ以降のコードに誤りがあったので訂正しました。

はじめに

位置が地域メッシュコードで提供されているビッグデータを扱う機会があり、プログラムで扱いやすい緯度経度の形に変換する関数を作成したので共有します。

参考にしたサイト

この記事は、こちらのブログに掲載されている第三次メッシュまでの変換コードを8分の1地域メッシュにまで対応させたものです。

地域メッシュコードとは

Wikipediaの記事によると、

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

地図の製作や提供においては、地域メッシュごとに紙地図を用意し、あるいはデジタル的な地図データファイルを用意することが行われる。

とされており、JIS X 0410で規格化されています。Esriジャパンのサイトにわかりやすくまとまっています。

実行環境

メッシュコードから緯度経度に変換する関数

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
            
       # 1/2メッシュ用計算
        if len(meshCode) >= 9:
            code_nineth = meshCode[8:9]
            code_nineth = int(code_nineth)
            if code_nineth % 2 == 0:
                lon += 0.01250000 / 2
            if code_nineth > 2:
                lat += 0.00833333 / 2
                
        # 1/4メッシュ用計算
        if len(meshCode) >= 10:
            code_tenth = meshCode[9:10]
            code_tenth = int(code_tenth)
            if code_tenth % 2 == 0:
                lon += 0.01250000 / 2 / 2
            if code_tenth > 2:
                lat += 0.00833333 / 2 / 2
        
        # 1/8メッシュ用計算
        if len(meshCode) >= 11:
            code_eleventh = meshCode[10:11]
            code_eleventh = int(code_eleventh)
            if code_eleventh % 2 == 0:
                lon += 0.01250000 / 2 / 2 / 2
            if code_eleventh > 2:
                lat += 0.00833333 / 2 / 2 / 2

    return lat, lon

関数の使い方

Pythonに詳しい方でしたら見ればわかると思いますが、

lat,lon =  get_latlon(60413212422)

のようにすると、latに緯度が、lonに経度が代入されます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?