2016-07-29 3 views
0

У меня есть таблица с кучей полигонов (или многополигонов, я не уверен ... это имеет значение?) Одного типа (A), определенного в CTE, а затем другого другого типа (B) в другом CTE. Я хочу фильтровать только полигоны типа А, которые находятся в заданном радиусе , любые из многоугольников типа В. Как мне это сделать?Поиск полигонов в определенном радиусе ряда других полигонов

ответ

2

Создать коллекцию своих полигонов «B», используя ST_Collect & затем использовать ИНЕКЕ с ST_DWithin указать свой параметр расстояния.

Например:

WITH polys_a AS (
    SELECT geom 
    FROM buildings_dc 
), 
polys_b AS (
    SELECT geom 
    FROM buildings_va 
) 
SELECT polys_a.* 
FROM polys_a, 
(
     SELECT ST_Collect(geom) as geoms 
     FROM polys_b 
) as c 
WHERE ST_DWithin(a.geom, c.geoms, .001); 

Следует отметить, что оба набора геометрии могут быть различных типов (например, многоугольник, Point, MultiPolygon и т.д.), но они должны быть одного и того же проекции/системы координат. Если вы используете стандартный WGS84 (SRID 4326), параметр расстояния находится в градусах.

Смежные вопросы