Geoserver+postSQL+openlayer实现路径规划
Geoserver+postSQL+openlayer实现路径规划
转载请注明出处!!!
转载请注明出处!!!
转载请注明出处!!!
获取路网数据,可以自己模拟,可以去osm网站下载,将路网数据存入postSQL数据库
文档:获取贵阳市路网数据.note
链接:http://note.youdao.com/noteshare?id=20acd381a39bb6bed683a33ac28331c4
将获取的路网数据用arcmap打开,建立拓扑打断点。
右侧目录点击文件夹连接文件夹
打开arcmap,右击图层—添加数据
在文件夹连接里选择shp数据导入,
原始路网结果展示
右键点击开始编辑
打开地理----arctoolbox----数据管理工具(Data management tools)——>要素(Features)——>要素转线(Feature to line)这样就可以得到一条一条线段
将打断点之后的数据导出为shp文件,导入postSQL中,
CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION address_standardizer;--添加起点idALTER TABLE testline ADD COLUMN source integer;--添加终点idALTER TABLE testline ADD COLUMN target integer;--添加道路权重值ALTER TABLE testline ADD COLUMN length double precision;--为sampledata表创建拓扑布局,即为source和target字段赋值SELECT pgr_createTopology('testline',0.0001, 'geom', 'gid');--为source和target字段创建索引CREATE INDEX source_idx ON testline("source");CREATE INDEX target_idx ON testline("target");--为length赋值
//或者用已有的字段长度赋值,下面shape_length为shp中已有的长度属性
update testline set length =st_length(geom);或者
UPDATE crossroad SET length = shape_length;
--将长度值赋给reverse_cost,作为路线选择标准
ALTER TABLE crossroad ADD COLUMN reverse_cost double precision;
UPDATE crossroad SET reverse_cost =length;使用pgr_dijkstra算法查询
SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM crossroad,
1, 9, false, false);4用geoserver发布图层(路网图层).用geoserver发布视图(最短路径)
第一个为路网,第二个为道路交汇点发布完成后,发布视图
SELECT seq, id1 AS node, id2 AS edge, cost,geom FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM testline',
%from%, %to%, false, false) as di
join testline pt
on di.id2 = pt.gid
编写前端页面调用地图图层
<html>
<head><link rel="stylesheet" href="js/ol.css" type="text/css"><style>.map {height: 90vh;width: 100%;}</style><script src="js/jquery-1.12.3.min.js"></script><script src="js/ol.js"></script><title>路径规划</title>
</head>
<body><div><input type="number" id = "fromInput"><input type="number" id = "toInput"><button type="button" id="add">路径查询</button></div><div id = 'map'></div><script src="js/get_rout.js"></script><script>$(document).ready(function(){initMap(); });$('#add').click(function(){var from = $("#fromInput").val();var to = $("#toInput").val();getRoutingByAjax(from,to);}); </script></body>
</html>
js文件内容
var map;
function initMap() {var tileLayer = new ol.layer.Tile({title: "天地图底图",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=你的密钥"})});//标注图层var tileMark = new ol.layer.Tile({title: "天地图文字标注",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=你的密钥"})});// 路网图层数据var roadLayer = new ol.layer.Tile({source: new ol.source.TileWMS({url: 'http://localhost:8080/geoserver/workspace/wms',params: { 'LAYERS': 'workspace:export_output', 'TILED': true },// serverType: 'geoserver',}),})//道路交汇处打断点var roadPoint = new ol.layer.Tile({source: new ol.source.TileWMS({url: 'http://localhost:8080/geoserver/workspace/wms',params: { 'LAYERS': 'workspace:export_output_vertices_pgr', 'TILED': true },// serverType: 'geoserver',}),})map = new ol.Map({target: 'map',view: new ol.View({center: [110.52650, 29.12068],zoom: 16,projection: "EPSG:4326"}),layers: [tileLayer,//顺序不能出错tileMark,roadLayer,roadPoint]});
}var routeSource = new ol.source.Vector();
var routeLayer = new ol.layer.Vector({source: routeSource,style: new ol.style.Style({stroke: new ol.style.Stroke({color: 'green',width: 5})}),name: 'route'
});function getRoutingByAjax(fromID, toID) {clearLayer();var data = {'service': 'wfs','version': '1.0.0','request': 'GetFeature','typeName': 'workspace:testSqlView1','outputFormat': 'application/json','viewparams': 'from:' + fromID + ';to:' + toID};$.ajax({type: "POST",url: "http://localhost:8080/geoserver/workspace/wfs",data: data}).then(function (response) {var features = new ol.format.GeoJSON().readFeatures(response);routeSource.addFeatures(features);})
}function clearLayer() {map.removeLayer(routeLayer);map.addLayer(routeLayer);routeSource.clear();
}
结果展示
参考:
https://blog.csdn.net/u014529917/article/details/72866436
https://blog.csdn.net/u012413551/article/details/85217105
https://blog.csdn.net/u012413551/article/details/85145966
Geoserver+postSQL+openlayer实现路径规划相关推荐
- postgresql 新建decimal字段_postgresql路径规划插件pgrouting使用
pgrouting是postgresql的路径规划拓展插件.支持用户使用数据库中的路网数据构建拓扑,并基于拓扑路网数据进行最短路径查询或耗费成本计算,并支持矩阵运算. pgrouting的官方文档见: ...
- autoware使用rosbag数据生成路径点并进行路径规划(七)
autoware使用rosbag数据生成路径点并进行路径规划(七) 第一步启动autoware和播放数据包 $ cd ~/autoware.ai $ source install/setup.bash ...
- 智能算法的应用记录一点点-----TSP 路径规划
在研究智能算法的时候,想到怎么应用了吗?单纯的使用基准函 数进行测试就能证明算法是优秀的吗?? 文章链接: [图文]几种智能算法概述及其应用_百度文库 https://wenku.baidu.com/ ...
- 基于Dijkstra算法的武汉地铁路径规划!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了 ...
- 【路径规划】Astart算法——图文直观解析
Astart算法详解 1. Astart算法路径搜索原理 2. 栅格网络的Astart算法 3. Astart算法优缺点 1. Astart算法路径搜索原理 Dijkstra算法已经是非常经典的求 ...
- 【路径规划】Dijkstra算法——超详细原理图解
Dijkstra算法详解 1. Dijkstra算法原理 1.1. 有向图的Dijkstra算法 1.2. 无向图和栅格网络的拓展 1.2.1. 无向图 1.2.2. 栅格网络 2. Di ...
- 车 局部路径规划与避障
双目避障 单目避障是否可行? 全局路径规划有RRT.A*.D*. 局部路径规划有DWA.TEB. 控制有 MPC.
- 路径规划(Path Planning)与运动规划(Motion Planning)
路径规划(Path Planning)与运动规划(Motion Planning) 评论区有个观点: 也可以把路径规划理解为运动规划的一份.我个人具体的认识是,特别是在实现的时候,路径规划我们强调的是 ...
- 机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划
作者:Tom Hardy Date:2020-02-14 来源:机器人抓取汇总|涉及目标检测.分割.姿态识别.抓取点检测.路径规划
- CBS多机器人路径规划
CBS多机器人路径规划 单个机器人通过路径规划.运动控制,能够躲避环境中的障碍物,但会面临一个严峻的问题.当一个场景中存在多辆移动机器人时,即使每个机器人都有避障策略,也很容易就会造成道路拥堵. ...
最新文章
- mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...
- 项目需求|室内场景三维空间重建项目
- 计算机基础课程金课建设,大学计算机基础金课建设探索与实践
- 学典教育计算机二级,层次化分类的离线中文签名真伪鉴别方法-计算机工程与应用.PDF...
- js操作json数据的一些感受
- java 前端导出exvel_java导出数据到Excel文件 前端进行下载
- 了解SQL Server中的GUID数据类型
- SylixOS 内存管理源代码分析--phyPage.c
- vscode有趣插件
- h5难做吗_H5系列课程| 做一只涨工资的H5 没有你想得那么难
- 数量关系--容斥原理
- 浊音、清音、爆破音音频分析
- 交易系统的高盈亏比怎么实现?
- 真实的感情---可是你没有
- 实现图片在时间轴左右交替放置
- matlab 固有频率 振型,基于MATLAB语言多自由度振动系统固有频率及主振型计算分析.pdf...
- 解决redis缓存穿透、redis缓存雪崩问题
- element 表格背景颜色透明
- origin作统计图(两个x正轴,一个y轴效果)
- Vue项目实战之人力资源平台系统(一)框架介绍及项目环境搭建
热门文章
- 实对称矩阵的奇异值等于特征值
- java爬虫新闻网站_java爬虫 之 搜狐新闻爬虫(一)
- Fortran入门教程(三)——输入输出
- 我的世界java版地牢种子_《我的世界》12个地牢种子位置解析
- setuna截图怎么放大缩小_手机中的望远镜 华为P30pro是怎么做到50倍变焦?
- AD7124-4/8芯片的模拟通道、基准、顺从电压、测三线制RTD电路等注意事项
- 手把手教你实现自己的预设滤镜
- vue 动态scss变量,包含16进制转rgba,rgba转16进制
- VB基础入门教程.doc
- c语言有趣源代码,分享一段有趣的小代码