Djangoアプリケーションで2点間の距離を測定し、その結果を信頼できる測定値と比較するいくつかの方法を試しました。数値は離れています。たとえば、Google Mapsの報告によると、ダブリンとリバプールの間の実際の距離は約217kmであると想定しています。

ここに画像の説明を入力

geopyを使用(

非常に正確):

>>> from geopy.distance import distance >>> dublin = (-6.270447, 53.339791) >>> liverpool = (-2.991028, 53.402061) >>> distance(dublin, liverpool).km 362.70989455939394 

DjangoのGEOSAPIの使用(精度の低い線形計算):

>>> from django.contrib.gis.geos import Point >>> dublin = Point(-6.270447, 53.339791, srid=3857) >>> liverpool = Point(-2.991028, 53.402061, srid=3857) >>> dublin.distance(liverpool)*100 328.00101418228877 

編集:この領域(UTM 30N)では、ほぼ同じ結果が得られます。

>>> dublin.transform(32630) >>> liverpool.transform(32630) >>> dublin.distance(liverpool)*100 328.32200116442266 

どちらの場合もオフです。 100km以上!短い距離の測定(< 1km)も同様に不正確です。ここで何が間違っているのですか!?

コメント

  • djangoの例では、はありません' t EPSG:3857度の代わりにメートルを使用しますか
  • 特にはるか北の距離測定には、メルカトルを使用しないでください。
  • ポイントを32630(UTMゾーン30N)に変換してみたところ、328.3kmになりました。この場合、ほとんど違いはありません。 ' geopyのドキュメントやその他の回答には、投影については何もありません。取得したVincenty距離はmmレベルで正確である必要があります。 。
  • dublin.distance(liverpool)*100 < -1000ではなく100を掛ける必要があるという事実は、何かを教えてくれるはずです。ここで疑わしいことが起こっています。

回答

座標を逆にすると、機能しません(geopyは(緯度、経度)WGS84 crs)

 dublin = (53.33306,-6.24889) liverpool = ( 53.41058,-2.97794) print distance(dublin, liverpool).km 217.863019038 print(vincenty(dublin, liverpool).kilometers) 217.863019038 print(great_circle(dublin, liverpool).kilometers) 217.211596704 

GEOS(形の良い、django )デカルト平面とユークリッド距離を使用します。 pyproj (djangoは(経度、緯度)を使用)

from django.contrib.gis.geos import Point dublin = Point(-6.270447, 53.339791, srid=4326) # in degrees liverpool = Point(-2.991028, 53.402061, srid=4326) # in degrees dublin.distance(liverpool)*100 328.00101418228877 # units ? import pyproj # conversion from WGS84 to epsg:3857 p1 = pyproj.Proj(proj="latlong",datum="WGS84") p2 = pyproj.Proj(init="epsg:3857") a = pyproj.transform(p1,p2,-6.270447, 53.339791) b = pyproj.transform(p1,p2,-2.991028, 53.402061) dublin = Point(a) # in meters liverpool = Point(b) # in meters dublin.distance(liverpool)/1000 # Euclidean 365.2480859440489 #in km 

ただし、Vinceとしてメルカトル図法を距離測定に使用しないでください。

EPSG:32630(UTMゾーン30N)の場合:

p3 = pyproj.Proj(init="epsg:32630") a = pyproj.transform(p1,p3,-6.270447, 53.339791) b = pyproj.transform(p1,p3,-2.991028, 53.402061) dublin = Point(a) liverpool = Point(b) dublin.distance(liverpool)/1000 218.32514783088294 #in km 

そして、すべての結果(geopyとdjango)は、Googleの距離またはリバプールからダブリンまでの距離(218 km)

に匹敵します。コメント

  • lon、lat / lat、lonの混乱が再び発生します!そこにあると確信していました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です