Я бился над этим несколько часов, но, поскольку я относительно новичок в PostgreSQL и PostGIS, я не могу найти решение. Я пытаюсь создать хранимую процедуру (функцию), которая будет возвращать все местоположения, указанная геометрия точек которых находится в пределах указанного многоугольника.
Вот моя функция PostgreSQL:
CREATE OR REPLACE FUNCTION public.spGeoPoly(polystring text) RETURNS setof locations
AS $$
BEGIN
RETURN QUERY
SELECT * FROM locations
WHERE ST_Contains(ST_GeomFromText('POLYGON((polystring))', 4326), point_geom);
END;
$$ LANGUAGE plpgsql;
Я протестировал это с жестко закодированной полистрокой, которая работает, но как функция с входной строкой, такой как:
SELECT spGeoPoly('50.4 8.2,50.3 9.3,49.9 9.5,49.7 8.8,49.9 7.8,50.4 8.2');
Я получаю сообщение об ошибке:
ERROR: parse error - invalid geometry
HINT: "polygon((" <-- parse error at position 9 within geometry
Я предполагаю, что мой входной текст не преобразуется должным образом в формат, необходимый для создания многоугольника, поскольку позиция 9 является началом строки параметров многоугольника. Как я могу исправить текстовый параметр?
Я использую PostgreSQL 8.4.13 и PostGIS 1.5.8.
WHERE ST_Contains(ST_GeomFromText('POLYGON(('+polystring+'))', 4326), point_geom);
? - person AjV Jsy   schedule 28.02.2013ERROR: operator does not exist: unknown + text
- person alreit   schedule 01.03.2013