0
0

More than 1 year has passed since last update.

Pytrhonで10進数の緯度経度からメッシュコードを計算する

Posted at

プログラム作成の経緯(概要)

JavascriptのライブラリLeaflet(WebMap)と筆ポリゴン(農地区画データ)を利用して、Web上で圃場ごとに栽培管理を行うようなシステムを作ってみたいと思って作ってる中で、緯度経度からメッシュコードが分かると便利だよねという場面があったので作ってみました。 いろいろな記事を参考にしながら作ってみたのですが、間違っている部分があったらご指摘ください。

目次

やりたい事
実装
53394525が東京なのか検証する
まとめ
参考

やりたい事

東京 経度 : 35.6894
   緯度 : 139.6917
今回は東京の緯度経度を参考に、入力として(35.6894,139.6917)を与えてあげると 12345678に様な3次メッシュコードが返ってくる

実装

今回は3次メッシュコードを求めることを前提にプログラムを作成しています。

def calc_mesh3dim_from_latlng(lat,lng): 
    dim1_12 = int(round(lat*60,5)/40)
    dim1_34 = int(round((lng-100),5))
    dim1_12_mod = round(((round(lat*60,5)/40)-int((round(lat*60,5)/40)))*40,5)
    dim1_34_mod = round(round((lng-100),5)-int(round((lng-100),5)),5)

    dim2_1 = int(round(dim1_12_mod/5,5))
    dim2_1_mod = round(((dim1_12_mod/5)-int((dim1_12_mod/5)))*5,5)

    dim2_2 = int(round(dim1_34_mod*60/7.5,5))
    dim2_2_mod = (round(dim1_34_mod*60/7.5,5)-int(dim1_34_mod*60/7.5))*7.5

    dim3_1 = int((dim2_1_mod*60/30))
    dim3_1_mod = round((dim2_1_mod*60/30-int(dim2_1_mod*60/30))*30,5)

    dim3_2 = int((dim2_2_mod*60/45))
    dim_3_2_mod = round((dim2_2_mod*60/45-int(dim2_2_mod*60/45))*45,5)

    # print(f"{dim1_12}{dim1_34}{dim2_1}{dim2_2}{dim3_1}{dim3_2}")
    return int(f"{dim1_12}{dim1_34}{dim2_1}{dim2_2}{dim3_1}{dim3_2}")

# 検索エンジンで [東京 緯度経度]と検索した際にヒットした緯度経度を引数に設定しています。
print(calc_mesh3dim_from_latlng(35.6894,139.6917))
## [出力] 53394525

53394525が東京なのか検証する

出力された3次メッシュコード"53394525"が東京なのか検証するために以下のサービスを使わせていただきました。
標準地域メッシュ検索アプリ
https://www.arcgis.com/apps/instant/lookup/index.html?appid=ec8abf80f76c4417b01561e303ed2d32

上記のサービスを利用して検証してみた結果
53394525は東京都庁辺りの区画であることが分かりました。
計算が正確にできているみたいでよかったです(汗)
image.png

まとめ

緯度経度からメッシュコードが分かると便利な場面があったので作ってみました。
初めての投稿なので、分かりずらい点や間違っている点が多々あるかもしれませんが、その際はご指摘いただけると幸いです。

参考

作成したときに参考にしたページが見つからなかったので、当時見たものと似た記事をいくつか載せておきます。

0
0
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
0
0