функция для postgis/postgresql

Ответить
Trippal
Участник
Сообщения: 89
Зарегистрирован: 16 май 2012, 21:29
Репутация: 0

функция для postgis/postgresql

Сообщение Trippal » 02 дек 2014, 14:55

добрый день уважаемые форумчане. ГОРЮ.
Вопрос такой, я не особо сведущ в построений функций. SQL нормально тяну, а вот с функциями беда просто.
Есть входная переменная - геометрия объекта.
есть две таблицы
буквально, не осложняя понимание:
t1 (id,geom,info1,info2,info3,uniq_id)
t2 (id, geom,uniq_id)

Смысл задачи таков:
1)найти по буферной зоне рандомной точки пересечение с полигонами из t2 (координаты рандомной точки все время меняются)
2) найти пересечение полигона из t2 с точной из t1
3) получить информацию info1,info2,info3

вот так, приблизительно и, судя по всему, не верно выглядит sql запрос (до AND он работает)
SELECT t1.info1,t1.info2,t1.info3
FROM public.t1,
public.t2
WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);


Понимаю, что задача не простая, но если есть хотя бы лоскуты для этой функции буду крайне признателен.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: функция для postgis/postgresql

Сообщение KolesovDmitry » 02 дек 2014, 16:42

На первый взгляд вроде все нормально. А что конкрентно не работает?

И такой еще вопрос: геометрии хранятся в одной системе координат?

Trippal
Участник
Сообщения: 89
Зарегистрирован: 16 май 2012, 21:29
Репутация: 0

Re: функция для postgis/postgresql

Сообщение Trippal » 02 дек 2014, 17:19

проблема в написании самой функции. как она должна выглядеть на языке pgsql...

grozhentsov
Активный участник
Сообщения: 163
Зарегистрирован: 24 янв 2012, 22:02
Репутация: 24
Откуда: Москва
Контактная информация:

Re: функция для postgis/postgresql

Сообщение grozhentsov » 02 дек 2014, 17:50

Trippal писал(а): WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);
Адский ад. Мне тоже надо понять как из 8 физических точек с одинаковыми координатами с разными показателями получить одну с показателями в полях.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: функция для postgis/postgresql

Сообщение Ariki » 02 дек 2014, 18:50

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

Код: Выделить всё

SELECT *
FROM table1 t1, table2 t2
WHERE public.st_intersects(t1.geom, t2.geom)
AND public.ST_Intersects(ST_Buffer(ST_SetSRID(ST_Point(66.10, 55.00), 4326), 0.0001), t2.geom);
Только не делайте, как я в этом примере: не стройте буфер в географических координатах, это у меня просто таблицы под рукой в 4326 оказались. Конвертируйте в географию или используйте подходящую проекцию.
Последний раз редактировалось Ariki 02 дек 2014, 18:55, всего редактировалось 1 раз.

Trippal
Участник
Сообщения: 89
Зарегистрирован: 16 май 2012, 21:29
Репутация: 0

Re: функция для postgis/postgresql

Сообщение Trippal » 02 дек 2014, 18:52

grozhentsov писал(а):
Trippal писал(а): WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);
Адский ад. Мне тоже надо понять как из 8 физических точек с одинаковыми координатами с разными показателями получить одну с показателями в полях.
Я в начале написал. что судя по всему не правильно :)

Trippal
Участник
Сообщения: 89
Зарегистрирован: 16 май 2012, 21:29
Репутация: 0

Re: функция для postgis/postgresql

Сообщение Trippal » 02 дек 2014, 18:55

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

Код: Выделить всё

SELECT *
FROM table1 t1, table2 t2
WHERE public.st_intersects(t1.geom, t2.geom)
AND public.ST_Intersects(ST_Buffer(ST_SetSRID(ST_Point(66.10, 55.00), 4326), 0.0001), t2.geom);
Только не делайте, как я в этом примере: не стройте буфер в географических координатах, это у меня просто таблицы под рукой в 4326 оказались. Конвертируйте в географию или используйте подходящую проекцию.
о, спасибо, попробую, я так понял, так как у меня координаты в WKB, то и выглядеть будет по другому однозначно.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: функция для postgis/postgresql

Сообщение Ariki » 02 дек 2014, 18:58

Просто лишние скобки уберите:

Код: Выделить всё

SELECT t1.info1,t1.info2,t1.info3
FROM public.t1,
public.t2
WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects(ST_Buffer(st_geomfromwkb (координаты рандомной точки), 50), t2.geom);

Trippal
Участник
Сообщения: 89
Зарегистрирован: 16 май 2012, 21:29
Репутация: 0

Re: функция для postgis/postgresql

Сообщение Trippal » 02 дек 2014, 22:22

Спасибо вам большое!
разобрался

Ответить

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

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

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