#postgresql #function #postgis
#postgresql #функция #postgis
Вопрос:
Я создал функцию в postgresql, которая должна найти проекцию точки на сегмент, а затем найти расстояние от проекции до определенной точки. У меня есть два массива: первый массив — это массив с сегментами (LineString3D), второй массив — это массив с точками, которые я хочу интерполировать (Point3D). Мой код:
foreach i in array(first_array)
loop
foreach j in array(second_array)
loop
select ST_LineInterpolatePoint(ST_LineMerge(i::geometry), ST_LineLocatePoint(ST_LineMerge(i::geometry), j::geometry)) into interpolate_geom;
select st_length(st_makeline(j::geometry, interpolate_geom::geometry)) into length_geom;
end loop;
end loop;
Но postgres показывает мне этот массаж: ERROR: line_locate_point: 2st arg isn't a point
.
Если вы знаете, как исправить эту ошибку, пожалуйста, объясните.
Комментарии:
1. Похоже, что в
second_array
есть элемент, который не является точкой.2. ST_LineLocatePoint, возможно, не принимает 3D-точку. Попробуйте выполнить ST_Force2D для вашей точечной геометрии, а затем ST_LineLocatePoint