2011-01-06 8 views
3

djangoには、地理座標(小数点以下緯度)を調べ、特定の半径を持つ円の内側にあるかどうかを判断するものがありますか(100 Kmとしますか?Django - 地理座標が円の内側にあるかどうかを調べる

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

私はおそらくこれを処理する自分自身を書くことができましたが、これを処理する何かが既に書かれていれば私はさまよいます。

答えて

12

この問題は、非常に良い精度について気にしない場合、純粋なSQLで解決できます。

あなたは、この特定のSQLクエリとGPSの位置を中心にポイントを見つけることができます。これは、50キロの領域にあなたの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) 

。あなたが簡単にジャンゴでこれをプラグインすることができ

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

またはdjango raw queries

+0

とは、あなたがjujuleありがとうございます。私はこれがうまくいくと思います。私はgeodjangoでまだ混乱したくない。これはちょうど完璧です。 – avatar

+0

私はちょうど好奇心からいくつかのpostgisの文書を調べ、これを見つけました。 http://postgis.refractions.net/documentation/manual-1.5/ST_DWithin.htmlあなたがすでにPostgisを使用しているのであれば、もう少しシンプルなようです。 – Keyo

+0

ありがとうございました。私はPostgresがGISのものをもっとサポートしているようだから、MySQLからPostgresに切り替えるべきだと思う。 – avatar

関連する問題