1

モデルに「座標」という名前の PointField フィールドを格納します。

次に、コマンド インタープリターで、指定されたインスタンスから最も近いインスタンスを参照し、その名前と距離 (km) を出力します。

[(p.name, p.distance.m) for p in Model_Name.objects.filter(
  coordinates__distance_lte=(pnt, 1000000)).distance(pnt)]

問題は、フィールド「座標」が親切なジオメトリである場合、うまく機能することです。しかし、オプション「geography = True」を含めると、精度を高めるために、以前のように km で印刷するように指定していても、はるかに小さい値が返されます。

正しい地理計算を取得するにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

追加。クエリ セットの最後までの距離() は、距離オブジェクトで注釈が付けられているジオクエリセット内の各オブジェクトになります。そして、その距離オブジェクトを使用して、さまざまな単位で距離を取得できます。

distance アトリビュートは Distance オブジェクトであるため、選択した単位で値を簡単に表すことができます。たとえば、city.distance.mi はマイル単位の距離値であり、city.distance.km はキロメートル単位の距離値です。

ただし、django 1.9 では、ゴール ポストを移動しましたが、 .distance() の追加は引き続き機能しますが、推奨される方法は

from django.contrib.gis.db.models.functions import Distance
[  (p.name, p.distance.m) for p in Model_Name.objects.filter(
   coordinates__distance_lte=(pnt, 1000000)
   ).annotate(distance=Distance('point', pnt))]

最後に、使用する代わりに、 postgiscoordinates__distance_lteと mysql 5.7 で使用できるはるかに高速な方法があります: dwithin

于 2016-04-30T05:41:59.357 に答える