6

PostgreSQL/PostGISに、旅の開始場所と終了場所を示す( ) と( )tripの 2 つのジオメトリ列で名前が付けられたテーブルがあります。source_geomPOINTdestination_geomPOINT

オフィスの場所を示すbusinessジオメトリ列office_geom( )という名前の別のテーブルがもう 1 つあります。POINT

私の目的は、目的地がいずれかのオフィスの場所tripから 1000 メートル以内にあるテーブルからレコードを選択することです。

必要な結果を得るには、どのクエリを起動する必要がありますか?

4

1 に答える 1

3

サブクエリまたは結合を使用して実行できます。サブクエリを使用した例:

SELECT * FROM business 
WHERE EXISTS(
    SELECT 1 FROM trip
    WHERE ST_Distance_Sphere(trip.destination_geom, business.office_geom) < 1000
)

ただし、このクエリはインデックスを使用しないため、大きなデータセットでは時間がかかる可能性があります。これが必要な場合は、geographyから列をgeometry作成し、geography 列に空間インデックスを作成し、ST_DWithinを使用できます。

select * 
  from business b
  join trip t on ST_DWithin(trip.destination_geogr, business.office_geogr, 1000)
于 2012-10-10T15:30:20.980 に答える