postgis 拓扑网路实现沿路测距

通过shp导入postgis后的拓扑路网,实现沿路测距,通过wfs请求完成前端的服务实现

[1].增加数据字段

-- Function: public.pgr_fromatob_4(character varying, double precision, double precision, double precision, double precision)-- DROP FUNCTION public.pgr_fromatob_4(character varying, double precision, double precision, double precision, double precision);CREATE OR REPLACE FUNCTION public.pgr_fromatob_4(tbl character varying,startx double precision,starty double precision,endx double precision,endy double precision)RETURNS 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--select st_asText(pgr_fromatob_4) from pgr_fromatob_4('rshenzhen_polyline',113.87584447860719,22.5617927312851,113.88471722602846,22.563627362251285)--查询离起点最近的线 execute 'select geom, source, target  from ' ||tbl||' where  ST_DWithin(geom,ST_Geometryfromtext(''point('|| startx ||' ' || starty||')'',4326),100)order by ST_Distance(geom,ST_GeometryFromText(''point('|| startx ||' '|| starty ||')'',4326))  limit 1'into v_startLine, v_startSource ,v_startTarget; -- select * from public.shenzhen where shenzhen.direction = '2' limit 10--查询离终点最近的线 execute 'select geom, source, target from ' ||tbl||' where ST_DWithin(geom,ST_Geometryfromtext(''point('|| endx || ' ' || endy ||')'',4326),100)order by ST_Distance(geom,ST_GeometryFromText(''point('|| endx ||' ' || endy ||')'',4326))  limit 1'into v_endLine, v_endSource,v_endTarget; --如果没找到最近的线,就返回null if (v_startLine is null) or (v_endLine is null) then return null; end if ; select  ST_ClosestPoint(v_startLine, ST_Geometryfromtext('point('|| startx ||' ' || starty ||')',4326)) into v_statpoint; select  ST_ClosestPoint(v_endLine, ST_GeometryFromText('point('|| endx ||' ' || endy ||')',4326)) into v_endpoint; raise notice '%------------------------------------', st_asText(v_statpoint);raise notice '%------------------------------------', st_asText(v_endpoint);-- ST_Distance --从开始的起点到结束的起点最短路径 execute 'SELECT st_linemerge(st_union(b.geom)) FROM pgr_dijkstra(''     SELECT gid AS id,source::integer,target::integer,cost::double precision AS cost,reverse_cost::double precision AS reverse_cost FROM '||tbl||''', '||v_startSource||', '||v_endSource||', true,
true)a
LEFT JOIN '||tbl||' b
ON (a.id2 = b.gid)  '  into v_res;--从开始的终点到结束的起点最短路径execute 'SELECT st_linemerge(st_union(b.geom)) FROM pgr_dijkstra(''     SELECT gid AS id,source::integer,target::integer,cost::double precision AS cost,reverse_cost::double precision AS reverse_cost FROM '||tbl||''', '||v_startTarget||', '||v_endSource||', true,
true)a
LEFT JOIN '||tbl||' b
ON (a.id2 = b.gid)  '  into v_res_b;--从开始的起点到结束的终点最短路径execute 'SELECT st_linemerge(st_union(b.geom)) FROM pgr_dijkstra(''     SELECT gid AS id,source::integer,target::integer,cost::double precision AS cost,reverse_cost::double precision AS reverse_cost FROM '||tbl||''', '||v_startSource||', '||v_endTarget||', true,
true)a
LEFT JOIN '||tbl||' b
ON (a.id2 = b.gid)  '  into v_res_c;--从开始的终点到结束的终点最短路径execute 'SELECT st_linemerge(st_union(b.geom)) FROM pgr_dijkstra(''     SELECT gid AS id,source::integer,target::integer,cost::double precision AS cost,reverse_cost::double precision AS reverse_cost FROM '||tbl||''', '||v_startTarget||', '||v_endTarget||', true,
true)a
LEFT JOIN '||tbl||' b
ON (a.id2 = b.gid)
'  into v_res_d;if(ST_Length(v_res) > ST_Length(v_res_b)) thenv_res = v_res_b;end if;if(ST_Length(v_res) > ST_Length(v_res_c)) thenv_res = v_res_c;end if;if(ST_Length(v_res) > ST_Length(v_res_d)) thenv_res = v_res_d;end if;--如果找不到最短路径,就返回null --if(v_res is null) then --    return null; --end if; --将v_res,v_startLine,v_endLine进行拼接 select  st_linemerge(ST_Union(array[v_res,v_startLine,v_endLine])) into v_res;select  ST_LineLocatePoint(v_res, v_statpoint) into v_perStart; select  ST_LineLocatePoint(v_res, v_endpoint) into v_perEnd; --  raise notice '%------------------------------------v_perStart', st_asText(v_perStart);-- raise notice '%------------------------------------v_perEnd', st_asText(v_perEnd);    if(v_perStart > v_perEnd) then tempnode =  v_perStart;v_perStart = v_perEnd;v_perEnd = tempnode;end if;--截取v_res SELECT ST_Line_SubString(v_res,v_perStart, v_perEnd) into v_shPath;raise notice '%------------------------------------v_shPath', st_asText(v_shPath);    return v_shPath; end; $BODY$LANGUAGE plpgsql VOLATILE STRICTCOST 100;
ALTER FUNCTION public.pgr_fromatob_4(character varying, double precision, double precision, double precision, double precision)OWNER TO postgres;

[2].调用

  select st_asText(pgr_fromatob_4) from pgr_fromatob_4('tablename',113.87584447860719,22.5617927312851,113.88471722602846,22.563627362251285)---------
资料:
--https://www.jianshu.com/p/4b9d22406bce

postgis routing pgr_dijkstra道路拓扑分析与方向分析相关推荐

  1. 全球及中国第五代移动通信技术(5G)产业建设现状与应用发展方向分析报告2022年

    全球及中国第五代移动通信技术(5G)产业建设现状与应用发展方向分析报告2022年 -------------------------------------  <出版单位>:鸿晟信合研究院 ...

  2. 全球及中国智能交通行业应用方向分析及创新发展战略报告2021版

    全球及中国智能交通行业应用方向分析及创新发展战略报告2021版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11月 [搜索 ...

  3. 中国机器视觉产业业发展战略研究及投资方向分析报告2022-2027年

    中国机器视觉产业业发展战略研究及投资方向分析报告2022-2027年   第1章:机器视觉行业概念界定及行业发展环境剖析1.1 机器视觉界定 1.1.1 机器视觉界定 1.1.2 机器视觉原理 1.1 ...

  4. C++程序员学习发展方向分析和指导(C++入门学习指导建议必看)

    一路走来,磕磕碰碰,走到现在,历经了千辛万苦,可是路才刚刚开始走,未来还很长,我将会不断的思考和探索. 我想,如果是打算走进C++编程的同志们,请好好看完这篇文章,或许,对你的发展有所启发.但是,不要 ...

  5. 中国牙科用人工骨替代材料市场供需态势与未来投资方向分析报告2022年

    中国牙科用人工骨替代材料市场供需态势与未来投资方向分析报告2022年 --------------------------------------- <修订日期>:2021年12月 < ...

  6. 全球及中国彩妆行业渠道模式调研与发展方向分析报告2022版

    全球及中国彩妆行业渠道模式调研与发展方向分析报告2022版 --------------------------------------- <修订日期>:2021年12月 <报告价格 ...

  7. 2022年全球及中国商用多旋翼无人机行业十四五战略目标与发展方向分析报告

    2022年全球及中国商用多旋翼无人机行业十四五战略目标与发展方向分析报告 --------------------------------------- <修订日期>:2021年12月 & ...

  8. 计算机与数学专业的就业前景,2019数学与应用数学专业就业前景和就业方向分析...

    专业概况项目信息 修业年限四年 授予学位理学学士 主要实践性教学环节包括计算机实习.生产实习.科研训练或毕业论文等,一般安排10-20周. 培养目标本专业培养掌握数学科学的基本理论与基本方法,具备运用 ...

  9. 大数据工程师就业前景及发展方向分析

    [导语]关于大数据工程师这一职业,想必大家已经不陌生了,目前国家越来越重视大数据的发展,大数据的人才是供不应求,越来越多的人开始进入大数据行业,并且大数据的就业前景也是很不错的,下面就来给大家进行20 ...

最新文章

  1. ProE常用曲线方程:Python Matplotlib 版本代码(玫瑰曲线)
  2. HTML基础知识(常见元素、列表、链接元素、图片元素)
  3. 【Golang】关于从切片中删除某个元素时会覆盖底层数组的说明
  4. [Leetcode] Climbing Stairs
  5. 百度搜索框智能提示功能代码
  6. 封装制作ghost xp,含加入域帐号配置迁移脚本。
  7. 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会(转)...
  8. layui搭建后台管理页
  9. codeup21158 循环比赛日程表
  10. 百度云不限速下载(Windows、Linux、Mac平台)
  11. 科技爱好者周刊:第 90 期
  12. 测试管理之--测试培训
  13. html设置表格的长款英文,HTML表格中英文和数字换行问题分享
  14. 【ECDH java后端和javaScript前后端互通实现】
  15. JXTA v2.5技术手册
  16. 调节广告速度,跳过广告的另一境界——Video Speed Controller
  17. STM32复位与时钟、定时器
  18. 【FFMPEG】vs2019调用FFmpeg动态库教程
  19. C/C++实现PCA降维以及故障监测
  20. 如何调用天气接口(如何解决WebService客户端引用 服务器无法处理请求。 未将对象引用设置到对象的实例)

热门文章

  1. 杭电OJ 1034(C++)
  2. 手写中文数字识别PyTorch实现(全连接卷积神经网络)
  3. Matlab中定义接口超类
  4. 重大计算机学院院标,计算机学院召开2021年国家自然科学基金申报动员会
  5. 祝大家猿(元)宵节快乐!一起来猜灯谜吧
  6. 《Linux Shell脚本攻略》学习笔记-第一章
  7. 毕业设计 手写数字识别算法研究与实现(源码+论文)
  8. 计算机启动一直进pe,win7装完系统后开机自动进入pe界面怎么办
  9. 一位职场老前辈呕心沥血总结的心得
  10. 【读书笔记】c和指针