2016-12-03 9 views
3

マイmodels.pyはこのフィールドを持っているユーザーとビジネスモデルを持っていますGeoDjango&SpatiaLite - フィルタリング近くの物体

location = PointField(geography=True) 

私はどのアドレスからジオコードサービスを介して(EPSG 4326で)Googleマップの座標を取得していますユーザーが指定します。
次に、上記のフィールドに保存します(EPSG 4326)。

今、私がしたいことは、ユーザの位置に基づいて、(例えば1キロの)指定された半径内のすべてのビジネスオブジェクトを取得することです:

Business.gis.filter(location__distance_lt=(request.user.location, D(km=1))) 

しかし、それは動作しません、それはこれが私に与えますエラー:

これを適切に解決する方法を知っている人はいますか?前もって感謝します!

+0

私は、クエリを実行する前に、投影システムへの変換に頼っ。そのように動作しますが、それほど正確ではありませんが、私の場合はそれが問題ではありません。 – MikiSoft

+0

ちょっと@MikiSoft、私は少し遅れた答えを投稿した、見てください。 –

+0

@JohnMoutafisちょっと、私は前に説明した方法でそれをずっと前に解決しましたが、努力に感謝するためにあなたの答えを解決策としてマークしました。 :) – MikiSoft

答えて

0

論:

これは、これら2に関連したかなりあいまいなエラーです:

あなたのような測地座標系を(使用しているのでEPSG 4326)距離を度で指定します。ここで

は十分正確度キロを変換する方法については非常に良い説明です:How do I convert kilometres to degrees in Geodjango/GEOS?

最後に、私はdwithinを使用することをお勧めします。


プラクシス:

  • 1km ~= 0.008 deg
  • クエリが今になります。

    Business.gis.filter(location__dwithin=(request.user.location, 0.008)) 
    
関連する問題