функция для postgis/postgresql
-
- Участник
- Сообщения: 89
- Зарегистрирован: 16 май 2012, 21:29
- Репутация: 0
функция для postgis/postgresql
добрый день уважаемые форумчане. ГОРЮ.
Вопрос такой, я не особо сведущ в построений функций. 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);
Понимаю, что задача не простая, но если есть хотя бы лоскуты для этой функции буду крайне признателен.
Вопрос такой, я не особо сведущ в построений функций. 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);
Понимаю, что задача не простая, но если есть хотя бы лоскуты для этой функции буду крайне признателен.
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: функция для postgis/postgresql
На первый взгляд вроде все нормально. А что конкрентно не работает?
И такой еще вопрос: геометрии хранятся в одной системе координат?
И такой еще вопрос: геометрии хранятся в одной системе координат?
-
- Участник
- Сообщения: 89
- Зарегистрирован: 16 май 2012, 21:29
- Репутация: 0
Re: функция для postgis/postgresql
проблема в написании самой функции. как она должна выглядеть на языке pgsql...
-
- Активный участник
- Сообщения: 163
- Зарегистрирован: 24 янв 2012, 22:02
- Репутация: 24
- Откуда: Москва
- Контактная информация:
Re: функция для postgis/postgresql
Адский ад. Мне тоже надо понять как из 8 физических точек с одинаковыми координатами с разными показателями получить одну с показателями в полях.Trippal писал(а): WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: функция для postgis/postgresql
Прежде всего, у вас скобки неправильно расставлены.
У меня запрос (на моих таблицах, конечно) нормально отработал в таком виде:
Только не делайте, как я в этом примере: не стройте буфер в географических координатах, это у меня просто таблицы под рукой в 4326 оказались. Конвертируйте в географию или используйте подходящую проекцию.
У меня запрос (на моих таблицах, конечно) нормально отработал в таком виде:
Код: Выделить всё
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);
Последний раз редактировалось Ariki 02 дек 2014, 18:55, всего редактировалось 1 раз.
-
- Участник
- Сообщения: 89
- Зарегистрирован: 16 май 2012, 21:29
- Репутация: 0
Re: функция для postgis/postgresql
Я в начале написал. что судя по всему не правильноgrozhentsov писал(а):Адский ад. Мне тоже надо понять как из 8 физических точек с одинаковыми координатами с разными показателями получить одну с показателями в полях.Trippal писал(а): WHERE public.st_intersects(t1.geom, t2.geom)
AND public.st_intersects((ST_Buffer(st_geomfromwkb (координаты рандомной точки)), 50), t2.geom);
-
- Участник
- Сообщения: 89
- Зарегистрирован: 16 май 2012, 21:29
- Репутация: 0
Re: функция для postgis/postgresql
о, спасибо, попробую, я так понял, так как у меня координаты в WKB, то и выглядеть будет по другому однозначно.Ariki писал(а):Прежде всего, у вас скобки неправильно расставлены.
У меня запрос (на моих таблицах, конечно), нормально отработал в таком виде:Только не делайте, как я в этом примере: не стройте буфер в географических координатах, это у меня просто таблицы под рукой в 4326 оказались. Конвертируйте в географию или используйте подходящую проекцию.Код: Выделить всё
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);
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: функция для postgis/postgresql
Просто лишние скобки уберите:
Код: Выделить всё
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);
-
- Участник
- Сообщения: 89
- Зарегистрирован: 16 май 2012, 21:29
- Репутация: 0
Re: функция для postgis/postgresql
Спасибо вам большое!
разобрался
разобрался
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей