Страница 1 из 1
Подзапрос с геометрией
Добавлено: 27 фев 2015, 10:04
TimV
Добрый день.
Подскажите, пожалуйста начинающему.
В базе две таблицы с геометрией, мне нужно выбрать все объекты из таблицы "City" которые находятся на заданном расстоянии от объекта выбранного в другой таблице(типа select geom from District where name='Район").
Как создать запрос подзапросом да ещё с условием отбора по расстоянию?
Спасибо.
Re: Подзапрос с геометрией
Добавлено: 27 фев 2015, 10:41
TimV
как то так вроде
SELECT c.sem9
FROM "District" as d,
"city" as c
where ST_Within(c.geom, d.geom) and d.name='Район'
Re: Подзапрос с геометрией
Добавлено: 27 фев 2015, 11:45
AlexeyKW
думаю, при условии указания точного расстояния, лучше подойдет такой вариант:
SELECT c.sem9
FROM "District" as d,
"city" as c
where ST_Distance(c.geom, d.geom)<=100 and d.name='Район';
или:
SELECT c.sem9
FROM "District" as d,
"city" as c
where ST_DWithin(c.geom, d.geom, 100) and d.name='Район';
Re: Подзапрос с геометрией
Добавлено: 27 фев 2015, 12:32
TimV
Спасибо!
ST_DWithin - намного шустрее(индексы использует же))
Re: Подзапрос с геометрией
Добавлено: 03 мар 2015, 09:30
TimV
Подскажите ещё, пожалуйста.
Как мне отобрать объекты которые внутри площади? какие функции использовать?
ST_Distance и ST_DWithin отбирают прилегающие объекты, которые мне не нужны.
ps
У меня полигоны внутри полигонов(районы в областях)
Пробую получать центроиды районов и с помощью ST_DWithin отбирать, но ничего не выходит, центроиды видимо не правильно строятся.
Re: Подзапрос с геометрией
Добавлено: 03 мар 2015, 10:23
Игорь Черниенко
where st_contains(area,objects), в случае с полигонами еще можно st_intersects(geom1,geom2)
http://postgis.refractions.net/document ... asurements
Re: Подзапрос с геометрией
Добавлено: 03 мар 2015, 13:14
TimV
перегнал полигоны(районы) в точечные центроиды, точки теперь нормально отбираются по областям.
из областей передал инфу в точечные центроиды, а из центроидов уже передал в полигоны(районы)
вот так вот заморочился, потому что перепробовал все функции и не смог отобрать полигоны(районы) которые только внутри или чуть выходят за пределы полигона (область)
и ещё странно почему ф-я ST_Centroid не работала в sql запросе
писал типа select ..... st_Within(ST_Centroid(geom.район), geom.область)
но в результате не отбирались нужные мне объекты