4

geodjangoクエリ__containsを使用して、ポイントが円内にあるかどうかを確認できるように、geodjangoフィールドに円を格納しようとしています(PolygonFieldで実行できるのと同様)。

現在、10進半径とGeoDjangoポイントフィールドとして保存されていますが、これらのさまざまな円(ポイントフィールドと半径)に検索ポイント(long / lat)が含まれるように、DB内の場所のリストをクエリする方法が必要です。

それが理にかなっていることを願っています。

4

1 に答える 1

3

技術的に言えば、PostGIS は曲面ジオメトリを格納するために使用できるジオメトリ タイプをサポートCurvePolygonしています。CircularStringたとえば、x=10、y=10 を中心とする 2 単位の半径は、64 ポイントのバッファー ポリゴンによって近似されています。

SELECT ST_AsText(ST_LineToCurve(ST_Buffer(ST_MakePoint(10, 10), 2, 16)));
                   st_astext
------------------------------------------------
 CURVEPOLYGON(CIRCULARSTRING(12 10,8 10,12 10))
(1 row)

ただし、このジオメトリ タイプのサポートは非​​常に限られているため (つまり、ST_AsSVGやその他のタイプは機能しません)、このアプローチは通常は行われません。これらのジオメトリ タイプは多くの苦痛を引き起こす可能性が高いため、これを行わないことをお勧めします。

通常、すべてのジオメトリは十分にサポートされているタイプとして保存されます:または(オプションの接頭辞付きPOINT) 。これらのタイプでは、関数を使用して(たとえば、GeoDjangoはこれを __dwithin と呼びます。この質問も参照してください)、別のジオメトリが指定された距離内にあるかどうかを照会します。たとえば、ポイントの位置がある場合、他のジオメトリがそのポイントから特定の距離 (つまり、radius ) 内にあるかどうかを確認できます。LINESTRINGPOLYGONMULTI-ST_DWithin

于 2012-06-10T07:58:51.817 に答える