Я уже несколько часов стучаю по этому вопросу, но поскольку я относительно новичок в PostgreSQL и PostGIS, я не могу найти решение. Я пытаюсь создать хранимую процедуру (функцию), которая вернет все местоположения, указанная геометрия точек которых находится в указанном полигоне.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;
Я проверил это с жестким кодированием polystring, который работает, но в качестве функции с входной строки, такие как:
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);'? –
Это не так, к сожалению, я получаю 'ERROR: оператора не существует: неизвестно + текст' – alreit
Использует ли PostGres || вместо + для соединения строк? :) –