ERROR: line_locate_point: 1st arg isn’t a line
可能原因:
ST_Line_Locate_Point
函数处的参数问题
参考博客PostGIS 结合Openlayers以及Geoserver实现最短路径分析(二)使用openlayers+geosrever实现路线规划并没有出现结果,之后修改了部分代码终于解决了问题。
修改的函数代码:
CREATE OR REPLACE FUNCTION "public"."pgr_shortestpath"("tbl" varchar, "startx" float8, "starty" float8, "endx" float8, "endy" float8)
RETURNS "public"."geometry" AS $BODY$
declare
v_startLine geometry;--离起点最近的线
v_endLine geometry;--离终点最近的线
v_startTarget integer;--距离起点最近线的终点
v_startSource integer;
v_endSource integer;--距离终点最近线的起点
v_endTarget integer;
v_statpoint geometry;--在v_startLine上距离起点最近的点
v_endpoint geometry;--在v_endLine上距离终点最近的点
v_res geometry;--最短路径分析结果
v_res_a geometry;
v_res_b geometry;
v_res_c geometry;
v_res_d geometry;
v_perStart float;--v_statpoint在v_res上的百分比
v_perEnd float;--v_endpoint在v_res上的百分比
v_shPath_se geometry;--开始到结束
v_shPath_es geometry;--结束到开始
v_shPath geometry;--最终结果
tempnode float;
begin
--查询离起点最近的线
--4326坐标系
--找起点15米范围内的最近线
execute 'select geom, source, target from ' ||tbl