2

geodjango (PostGis 上) と空間ルックアップを多用するアプリケーションを作成しています。データベース側の距離クエリはうまく機能しますが、アプリケーションの Python 側で 2 点間の距離を計算する必要があります (これらの点は、別のクエリを使用して取得したモデルから取得されます)。

この距離を計算する方法はたくさん考えられますが、データベースが出力するものと一致する方法でそれを行うことを知りたいです。

SRID が測定された 2 点間の距離を計算する魔法の python 関数はありますか? そうでない場合は、他にどのようなアプローチを提案できますか。

4

3 に答える 3

3

この質問から haversine 関数を使用できます。

>>> from math import radians, cos, sin, asin, sqrt
>>> 
>>> def haversine(lon1, lat1, lon2, lat2):
...     """
...     Calculate the great circle distance between two points 
...     on the earth (specified in decimal degrees)
...     """
...     # convert decimal degrees to radians 
...     lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
...     # haversine formula 
...     dlon = lon2 - lon1 
...     dlat = lat2 - lat1 
...     a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
...     c = 2 * asin(sqrt(a)) 
...     km = 6367 * c
...     return km 
... 
>>> haversine(-1.7297, 53.3205, -1.6997, 53.3186)
2.0025842109026413
于 2012-07-28T19:54:23.957 に答える
1

PostGIS との一貫性が必要な場合は、haversine 実装よりも優れたものを使用することをお勧めします。計算をはるかに正確に行うGeographicLibの Python バージョンを確認することをお勧めします。

gis.stackexchangeでより良い回答が得られます

于 2015-06-05T17:15:06.517 に答える
0

適切なデータ接続を使用して、既に使用している SQL 関数を実行し、それを取得します... すべての一貫性を保ちます。

于 2012-07-28T19:25:57.857 に答える