geodjangoクエリ__containsを使用して、ポイントが円内にあるかどうかを確認できるように、geodjangoフィールドに円を格納しようとしています(PolygonFieldで実行できるのと同様)。
現在、10進半径とGeoDjangoポイントフィールドとして保存されていますが、これらのさまざまな円(ポイントフィールドと半径)に検索ポイント(long / lat)が含まれるように、DB内の場所のリストをクエリする方法が必要です。
それが理にかなっていることを願っています。
geodjangoクエリ__containsを使用して、ポイントが円内にあるかどうかを確認できるように、geodjangoフィールドに円を格納しようとしています(PolygonFieldで実行できるのと同様)。
現在、10進半径とGeoDjangoポイントフィールドとして保存されていますが、これらのさまざまな円(ポイントフィールドと半径)に検索ポイント(long / lat)が含まれるように、DB内の場所のリストをクエリする方法が必要です。
それが理にかなっていることを願っています。
技術的に言えば、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 ) 内にあるかどうかを確認できます。LINESTRING
POLYGON
MULTI-
ST_DWithin