4

django には、地理座標 (10 進数の緯度/経度) を見て、特定の半径 (100 Km としましょう) の円の内側にあるかどうかを判断するものはありますか?

特定のタイプのデータがあり、それぞれに緯度/経度があり、データベースを検索して、そのデータが指定された半径サイズの円の内側にあるかどうかを確認したいと考えています。

私はおそらくこれを処理する何かを自分で書くことができますが、これを処理する何かがすでに書かれている場合、私はさまよっています.

4

1 に答える 1

12

非常に高い精度を気にしないのであれば、この問題は純粋な SQL で解決できます。

次の特定の SQL クエリを使用して、GPS 位置周辺のポイントを見つけることができます。

# find point around :
latitude = 46.2037010192871
longitude = 5.20353984832764
query= "SELECT ID, NOM, LAT, LON, 3956 * 2 * ASIN(SQRT(POWER(SIN((%s - LAT) * 0.0174532925 / 2), 2) + COS(%s * 0.0174532925) * COS(LAT * 0.0174532925) * POWER(SIN((%s - LON) * 0.0174532925 / 2), 2) )) as distance from POI  having distance < 50 ORDER BY distance ASC " % ( latitude, latitude, longitude)

これにより、50km エリアの GPS レコードを含むすべてのレコードが得られます。

これをdjangoに簡単にプラグインできます:

from django.db import connection
cursor = connection.cursor()
cursor.execute( query )
rows = cursor.fetchall()

またはdjango rawクエリを使用

于 2011-01-06T00:45:38.820 に答える