プログラム作成の経緯(概要)
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は東京都庁辺りの区画であることが分かりました。
計算が正確にできているみたいでよかったです(汗)
まとめ
緯度経度からメッシュコードが分かると便利な場面があったので作ってみました。
初めての投稿なので、分かりずらい点や間違っている点が多々あるかもしれませんが、その際はご指摘いただけると幸いです。
参考
作成したときに参考にしたページが見つからなかったので、当時見たものと似た記事をいくつか載せておきます。