はじめに
緯度経度から範囲内か検出する処理について記述したturfpyは
公式ドキュメントを確認すると距離や面積のように他の算出もできることがわかる
その精度についてまとめる
確認方法
豊田スタジアムの縦と横の距離や面積を算出する
天然芝部分115m×78m
=面積:8970平方メートル
google mapで確認
縦115メートル
横78メートル
google mapの精度は良い
距離算出
turfpyで距離算出する
# 縦
from turfpy import measurement
from geojson import Point, Feature
up = Feature(geometry=Point((35.085060714540326, 137.17072559325422)))
down = Feature(geometry=Point((35.08405221734936, 137.1710561065781)))
measurement.distance(up,down,units="m")
# > 90.09394736166121[期待値:115m]
# 横
left = Feature(geometry=Point((35.08450366860094, 137.1704693906022)))
right = Feature(geometry=Point((35.084674403537015, 137.17130142525738)))
measurement.distance(left,right,units="m")
# > 93.54724844615103[期待値:78m]
長く出るはずの縦が短くなる。
10m単位でずれる、精度は悪い。
面積算出
4端の緯度経度を指定して面積を算出
from turfpy.measurement import area
from geojson import Feature, FeatureCollection
geometry_1 = {
"coordinates": [[
[35.08495757288702, 137.17033453483242],
[35.08513216008627, 137.17114392284444],
[35.08412708307099, 137.17146555796265],
[35.083959294868194, 137.1706393577829]
]],
"type": "Polygon",
}
feature_1 = Feature(geometry=geometry_1)
feature_collection = FeatureCollection([feature_1])
area(feature_collection)
# > 7935.377349566643[期待値:8970平方メートル]
こちらも精度が悪い
精度の良い方法
geopyというライブラリが精度が良い
縦と横の距離算出→面積算出
縦と横の距離を算出して、積で面積を算出する
from geopy.distance import geodesic
up = (35.085060714540326, 137.17072559325422)
down = (35.08405221734936, 137.1710561065781)
left = (35.08450366860094, 137.1704693906022)
right = (35.084674403537015, 137.17130142525738)
vertical = geodesic(up, down).m
# > 115.87357738551685[期待値:115m]
horizon = geodesic(left, right).m
# > 78.20522543208969[期待値:78m]
stadium_area = vertical * horizon
# > 9061.919241057036[期待値:8970平方メートル]
緯度経度を取得する際のクリック精度もあるが
距離の精度が1m以内と良いので面積も近い値になる
まとめ
turfpyの情報が少ないので
使い方の問題か、なぜ近い値が出ないかまでわかりませんでしたが
新しいライブラリは使用する前に
使いたい精度が出せるか確認する必要があるなと思いました