Страница 1 из 1
функция для postgis/postgresql
Добавлено: 02 дек 2014, 14:55
Trippal
добрый день уважаемые форумчане. ГОРЮ.
Вопрос такой, я не особо сведущ в построений функций. 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);
Понимаю, что задача не простая, но если есть хотя бы лоскуты для этой функции буду крайне признателен.
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 16:42
KolesovDmitry
На первый взгляд вроде все нормально. А что конкрентно не работает?
И такой еще вопрос: геометрии хранятся в одной системе координат?
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 17:19
Trippal
проблема в написании самой функции. как она должна выглядеть на языке pgsql...
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 17:50
grozhentsov
Trippal писал(а):
WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);
Адский ад. Мне тоже надо понять как из 8 физических точек с одинаковыми координатами с разными показателями получить одну с показателями в полях.
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 18:50
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 оказались. Конвертируйте в географию или используйте подходящую проекцию.
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 18:52
Trippal
grozhentsov писал(а):Trippal писал(а):
WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);
Адский ад. Мне тоже надо понять как из 8 физических точек с одинаковыми координатами с разными показателями получить одну с показателями в полях.
Я в начале написал. что судя по всему не правильно

Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 18:55
Trippal
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, то и выглядеть будет по другому однозначно.
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 18:58
Ariki
Просто лишние скобки уберите:
Код: Выделить всё
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);
Re: функция для postgis/postgresql
Добавлено: 02 дек 2014, 22:22
Trippal
Спасибо вам большое!
разобрался