Запрос при подключении слоя из Postgis
-
- Активный участник
- Сообщения: 115
- Зарегистрирован: 18 ноя 2009, 11:31
- Репутация: 0
Запрос при подключении слоя из Postgis
Подскажите, есть ли возможность, при подключении слоя из Postgis в Qgis (например линии или точки), вывод ограничить контуром города из таблицы asettlement-polygon с указанием id нужного города, или просто ограничить квадратом (координатами углов), кругом (центр, радиус), ну или еще как-нибудь.
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Запрос при подключении слоя из Postgis
Обычными инструментами QGIS, по-моему, нельзя.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: Запрос при подключении слоя из Postgis
Такая возможность есть, правда не очень френдли-юзер способом.
При добавлении слоя из постгис базы с помощью Query Builder вы можете ограничить выборку (тоже самое можно сделать уже и после добавления слоя, во вкладке General->Subset). К сожалению, Query Builder не имеет встроенных возможностей для построения пространственных запросов, так как он универсальный и работает со всеми провайдерами. Но за то, он и не ограничивает выражение SQL where clause, поэтому вы можете написать любое выражение, которое поддерживает ваша СУБД.
Как пример, для выборки городов попадающих в определенный полигон:
Выборка городов, находящихся не далее 50км от указанной точки:
Выбор городов, лежащих внутри полигона, взятого из другой таблицы, с заданным id:
Если городов у вас не так много, то возможно будет проще создать вьюхи для каждого из полигонов. Тогда не придется мучить пользователей такими извращениями. Либо как вариант заготовить проекты с уже забитыми ограничениями для нужных слоев.
При добавлении слоя из постгис базы с помощью Query Builder вы можете ограничить выборку (тоже самое можно сделать уже и после добавления слоя, во вкладке General->Subset). К сожалению, Query Builder не имеет встроенных возможностей для построения пространственных запросов, так как он универсальный и работает со всеми провайдерами. Но за то, он и не ограничивает выражение SQL where clause, поэтому вы можете написать любое выражение, которое поддерживает ваша СУБД.
Как пример, для выборки городов попадающих в определенный полигон:
Код: Выделить всё
ST_Within(the_geom, ST_GeomFromText('POLYGON ((3529000 6306000, 3550000 6306000, 3550000 6336000, 3529000 6336000, 3529000 6306000 ))',3857))
Код: Выделить всё
ST_Distance(the_geom, ST_GeomFromText( 'POINT(3529000 6306000)',3857))<50000
Код: Выделить всё
ST_Intersects(the_geom, (SELECT the_geom FROM rayons where gid = 913))
-
- Активный участник
- Сообщения: 115
- Зарегистрирован: 18 ноя 2009, 11:31
- Репутация: 0
Re: Запрос при подключении слоя из Postgis
Спасибо - сейчас у меня st_dwithin(the_geom,'0101000020E6100000B9F30550EA7C414020327E2082874C40', 0.2), что видимо индексы не использует. Какой вариант предпочтительней?
С view - тоже пока не всё понятно
viewtopic.php?f=32&t=10765
С view - тоже пока не всё понятно
viewtopic.php?f=32&t=10765
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: Запрос при подключении слоя из Postgis
Лучше не гадать, а проверить explain вашего запроса. Посмотрите в pgAdmin, юзаются индексы или нет. С ST_Within, ST_Dwithin должен использоваться. С ST_Distance - нет.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя