Как исправить ОШИБКУ: line_locate_point: 2st arg не является точкой?

#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