powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функция для postgis/postgresql
7 сообщений из 7, страница 1 из 1
функция для postgis/postgresql
    #38822028
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день уважаемые форумчане.
Вопрос такой, я не особо сведущ в построений функций. SQL нормально тяну, а вот с функциями беда просто.
Есть входная переменная - геометрия объекта.
есть две таблицы
буквально, не осложняя понимание:
t1 (id,geom,info1,info2,info3,uniq_id)
t2 (id, geom,uniq_id)

смысл в том, что создать такую функцию, которая будет понимать входную переменную (динамическую, т.е. она будет меняться) - в данном случае на кликании мышкой получаем геометрию t2.geom.
затем необходимо найти пересечение с t1 (полигон более меньшего размера) - с этим запросом проблем нет. делается для получения информации по объекту из таблицы t1 в таблицу t2. Т.е. t2 наследует данные от t1 по пересечению объектов.

SELECT t2.uniq_id,t2.geom
FROM t1,t2
WHERE public.st_intersects(t1.geom, t2.geom)

Затем - получаем info1,info2,info3 для t2 в одну ячейку кортежа.

Итак, возможно продублирую для адекватного объяснения.
Eсть две таблицы t1 и t2
Необходимо получить информацию по объекту в таблице t2, через пересекающего его объекта из t1, при условии, что объект в таблице t2 все время может меняться.

Понимаю, что задача не простая, но если есть хотя бы лоскуты для этой функции буду крайне признателен.
...
Рейтинг: 0 / 0
функция для postgis/postgresql
    #38822281
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trippalдобрый день уважаемые форумчане.
Код: sql
1.
2.
3.
SELECT t2.uniq_id,t2.geom
FROM t1,t2
WHERE public.st_intersects(t1.geom, t2.geom)



Если у вас есть геометрия (как тип), то можно просто добавить значение в запрос как дополнительный предикат.
Также можно формировать геометрию из строки (если необходимо) через `ST_GeomFromText` .
Вот так:
Код: sql
1.
2.
3.
4.
SELECT t2.uniq_id,t2.geom
FROM t1,t2
WHERE st_intersects(t1.geom, t2.geom)
  AND st_intersects(t1.geom, ST_GeomFromText('POINT(x.xxx y.yyy)', 4326))
...
Рейтинг: 0 / 0
функция для postgis/postgresql
    #38822568
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о, спасибо, есть даже дополнение, буферная зоны точки клика в пересечении с t1, а затем c t2.
Но вот как это в функцию запихать, не понимаю...
...
Рейтинг: 0 / 0
функция для postgis/postgresql
    #38822722
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trippal,

Используйте функцию `ST_Buffer()` вокруг геометрий перед передачей их `ST_Intersects`.

Хотя, если вас интересует только факт нахождения в определенном отдалении, то используйте `ST_Dwithin(t1.geom, t2.geom, 125)` .
Если расстояние постоянно, то можно сделать функциональный GIST индекс по `ST_Expand(t1.geom, 125)` .
...
Рейтинг: 0 / 0
функция для postgis/postgresql
    #38822737
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

спасибо, это я и сделал, проблема в написании самой функции)
но все равно премного благодарен
...
Рейтинг: 0 / 0
функция для postgis/postgresql
    #38822869
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trippal,

Я рекомендую использовать PL/SQL для таких функций, т.к. функции на SQL-е прозрачны для планировщика и хорошо оптимизируются. Будем работать с SRF , т.е. функцию надо использовать во `FROM` части запроса.

Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE FUNCTION t2_onclick(in_click geometry, OUT uniq_id integer, OUT geom geometry) RETURNS SETOF record AS $t2_onclick$
    SELECT t2.uniq_id,t2.geom
      FROM t1
      JOIN t2 ON st_intersects(t1.geom, t2.geom)
    WHERE ST_DWithin(t1.geom, $1, 125);
$t2_onclick$ LANGUAGE sql;



Вызываем так:
Код: sql
1.
SELECT * FROM t2_onclick(ST_GeomFromText('POINT(x.xxx y.yyy)', 4326)) s;



Возможно натыкал ошибок, проверяем.
...
Рейтинг: 0 / 0
функция для postgis/postgresql
    #38823064
Trippal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovTrippal,

Я рекомендую использовать PL/SQL для таких функций, т.к. функции на SQL-е прозрачны для планировщика и хорошо оптимизируются. Будем работать с SRF , т.е. функцию надо использовать во `FROM` части запроса.

Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE FUNCTION t2_onclick(in_click geometry, OUT uniq_id integer, OUT geom geometry) RETURNS SETOF record AS $t2_onclick$
    SELECT t2.uniq_id,t2.geom
      FROM t1
      JOIN t2 ON st_intersects(t1.geom, t2.geom)
    WHERE ST_DWithin(t1.geom, $1, 125);
$t2_onclick$ LANGUAGE sql;



Вызываем так:
Код: sql
1.
SELECT * FROM t2_onclick(ST_GeomFromText('POINT(x.xxx y.yyy)', 4326)) s;



Возможно натыкал ошибок, проверяем.

Спасибо огромное, есть повод задуматься, Вы мне очень помогли.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функция для postgis/postgresql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]