問題:私のテーブルの各建物について、少なくとも2つの薬局と2つの教育センターが半径1km以内にあると言うことを選択する必要があります。すべてのPOI(薬局、商業センター、医療センター、教育センター、警察署、消防署など)がそれぞれの建物の1km以内にあります。テーブル構造 - >postgis advanced(?)選択照会
ビル(IDのシリアル、名前のvarchar型)
poi_category(IDシリアル、CNAME VARCHAR)はもちろん
ポイ(IDのシリアル、名前のvarchar型、C_IDのカテゴリ名であること--cname整数) - C_IDは、すべての列を座標FK参照poi_category(ID)
あるタイプのジオメトリではない地理である(のはGEOMそれらを呼びましょう)
ここで私はそれが行われる必要がありますが、私はいないよと思った方法です確かに、それは正しいこともアロこの問題の最適な解決方法はありますか?
SELECT r.id_b, r.id_p
FROM (
SELECT b.id AS id_b, p.id AS id_p, pc.id AS id_pc,pc.cname
FROM building AS b, poi AS p, poi_category AS pc
WHERE ST_DWithin(b.geom,p.geom, 1000) AND p.c_id=pc.id
) AS r,
(
SELECT * FROM r GROUP BY id_b
) AS r1
HAVING count (
SELECT *
FROM r, r1
WHERE r1.id_b=r.id_b AND r.id_pc='pharmacy'
)>1
AND
count (
SELECT *
FROM r, r1
WHERE r1.id_b=r.id_b AND r.id_pc='ed. centre'
)>1
これは私が必要とするものに行く方法ですか?パフォーマンスの観点からは、どのようなソリューションが良いでしょうか?最も洗練されたソリューションはどうですか? 私もここに投稿しました:http://gis.stackexchange.com/questions/11445/postgis-advanced-selection-query