Подзапрос с геометрией

Ответить
TimV
Участник
Сообщения: 56
Зарегистрирован: 15 май 2013, 12:41
Репутация: 1

Подзапрос с геометрией

Сообщение TimV » 27 фев 2015, 10:04

Добрый день.
Подскажите, пожалуйста начинающему.
В базе две таблицы с геометрией, мне нужно выбрать все объекты из таблицы "City" которые находятся на заданном расстоянии от объекта выбранного в другой таблице(типа select geom from District where name='Район").
Как создать запрос подзапросом да ещё с условием отбора по расстоянию?
Спасибо.

TimV
Участник
Сообщения: 56
Зарегистрирован: 15 май 2013, 12:41
Репутация: 1

Re: Подзапрос с геометрией

Сообщение TimV » 27 фев 2015, 10:41

как то так вроде
SELECT c.sem9
FROM "District" as d,
"city" as c
where ST_Within(c.geom, d.geom) and d.name='Район'

AlexeyKW
Новоприбывший
Сообщения: 7
Зарегистрирован: 28 ноя 2014, 16:05
Репутация: 4
Откуда: Новосибирск

Re: Подзапрос с геометрией

Сообщение AlexeyKW » 27 фев 2015, 11:45

думаю, при условии указания точного расстояния, лучше подойдет такой вариант:

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='Район';

TimV
Участник
Сообщения: 56
Зарегистрирован: 15 май 2013, 12:41
Репутация: 1

Re: Подзапрос с геометрией

Сообщение TimV » 27 фев 2015, 12:32

Спасибо!
ST_DWithin - намного шустрее(индексы использует же))

TimV
Участник
Сообщения: 56
Зарегистрирован: 15 май 2013, 12:41
Репутация: 1

Re: Подзапрос с геометрией

Сообщение TimV » 03 мар 2015, 09:30

Подскажите ещё, пожалуйста.
Как мне отобрать объекты которые внутри площади? какие функции использовать?
ST_Distance и ST_DWithin отбирают прилегающие объекты, которые мне не нужны.

ps
У меня полигоны внутри полигонов(районы в областях)
Пробую получать центроиды районов и с помощью ST_DWithin отбирать, но ничего не выходит, центроиды видимо не правильно строятся.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: Подзапрос с геометрией

Сообщение Игорь Черниенко » 03 мар 2015, 10:23

where st_contains(area,objects), в случае с полигонами еще можно st_intersects(geom1,geom2)
http://postgis.refractions.net/document ... asurements

TimV
Участник
Сообщения: 56
Зарегистрирован: 15 май 2013, 12:41
Репутация: 1

Re: Подзапрос с геометрией

Сообщение TimV » 03 мар 2015, 13:14

перегнал полигоны(районы) в точечные центроиды, точки теперь нормально отбираются по областям.
из областей передал инфу в точечные центроиды, а из центроидов уже передал в полигоны(районы)
вот так вот заморочился, потому что перепробовал все функции и не смог отобрать полигоны(районы) которые только внутри или чуть выходят за пределы полигона (область)

и ещё странно почему ф-я ST_Centroid не работала в sql запросе
писал типа select ..... st_Within(ST_Centroid(geom.район), geom.область)
но в результате не отбирались нужные мне объекты

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя