postgresql+postgis+pgrouting实现最短路径查询(2)---openlayers+geoserver实现最短路径
自己的最短路径实现基本上是按照参考博文的1、2和3进行的,实现的时候也是问题不断,只能是一个一个解决。
问题1:自己发布的geoserver服务无法和OSM底图叠加到一起。
解决:参考博文2提到发布服务时需将投影设为900913,我认为大可不必,仍然用4326即可,只是openlayers加载时配置好相关的参数即可,如下:
//定义地图边界
//var bounds= new OpenLayers.Bounds(12960129.562300, 4788641.902700, 12986389.084400, 4817845.581900); var bounds = new OpenLayers.Bounds(116.145027, 39.756095, 116.703957, 40.027940);
var options = {
projection: "EPSG:900913",
displayProjection: new OpenLayers.Projection('EPSG:4326'),
center: new OpenLayers.LonLat(116.46760559087, 39.936089796286),
maxExtent:bounds.transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913")
)
}; map = new OpenLayers.Map('map_element', options); var osmLayer = new OpenLayers.Layer.OSM();
map.addLayer(osmLayer);
var baseLayer = new OpenLayers.Layer.WMS("OpenLayers WMS",
//geoserver所在服务器地址
'http://localhost:8080/geoserver/ProjectLLL/wms',
{
layers: 'ProjectLLL:beijing_line',
format: "image/png",
transparent: true,
styles: '',
},
{
isBaseLayer: false,
singleTile: true,
ratio:1
}
);
//var baseLayer = new OpenLayers.Layer.OSM(); map.addLayer(baseLayer);
//添加control空间
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.ScaleLine());
map.addControl(new OpenLayers.Control.Scale); map.zoomToExtent(bounds);
OSM底图的投影是900913,设置代码:
projection: "EPSG:900913",
displayProjection: new OpenLayers.Projection('EPSG:4326'),
就能将两者摞到一起。
问题2:navigation图层的参数问题
解决:参数按照下面设置即可,navigation也是一个图层,只不过是一个加了SQL语句的空图层,向geoserver发出请求时,会自动执行SQL语句,得到图层。
result = new OpenLayers.Layer.WMS("navLayer",
'http://localhost:8080/geoserver/ProjectLLL/wms',
{ FORMAT: 'image/png',
transparent: true,
LAYERS: 'ProjectLLL:navigation',
viewparams:viewparams,
styles:'shortpath'
},
{isBaseLayer:false,
opacity: 1,
}
);
问题1中把自己发布的图层也加载到了osm底图上,可以不用加载它,直接在osm底图上操作,geoserver会返回最短路径的结果显示到osm底图上。
问题3:最短路径的SQL语句怎么写?很关键
解决:核心算法采用dijkstra算法,一开始主要参考1和4两篇文章写SQL语句,但总是得不到最后的结果,尝试了很多很多次,都以失败告终,其间的心情三言两语说不清楚啊。4中的方法条理逻辑很清晰,思路明确,但总是出错。1中的方法总体来说较为粗糙,也说的通,考虑的不够周全,但也是不知道出现了什么鬼错误,调试了无数次都没结果。最后的最后在万分绝望中,无意之间,看到了writing a pl/pgsql wrapper(http://workshop.pgrouting.org/chapters/wrapper.html)这是官方出的一个帮助说明,里面也说到一个方法和1中的方法差不多,我用这个尝试了一个,突然就成了,太突然了都,官网的东西都没怎么看,现在看来,官网的东西还是很实用的嘛。
最后,主要是按照3中给出的代码框架,对参数等进行调整,最后可以实现最短路径查询,只是SQL的算法写的有点粗糙,以后有时间再改一改。
参考博文:
3、基于openlayers的最短路径规划(1、2和3和上一篇的1和2是一个系列的,这个系列基本上涵盖了整个流程,但自己实现的时候也是问题不断。最好的办法就是看懂别人的思路,根据自己机器环境修改或者重写别人的代码,最后得到实现)
4、使用pgrouting求任意两点的最短路径(和我上一篇的4是一个系列的,这一篇文章里面的思路是很好的,但自己尝试了很多次没实现,只能含恨而终)
postgresql+postgis+pgrouting实现最短路径查询(2)---openlayers+geoserver实现最短路径的更多相关文章
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...
- postgresql+postgis+pgrouting实现最短路径查询(3)--流程图
项目结束,做一个项目的总结汇报,就把最短路径查询的实现流程图画了一下,现在补出来:
- postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑
准备一个线shp数据,并将其导入postgres里面,postgres安装postgis和pgrouting两个插件(方法见http://www.cnblogs.com/nidaye/p/455352 ...
- 路径分析—QGIS+PostgreSQL+PostGIS+pgRouting(一)
前言 因业务需求,需要做最短路径分析.最近几天查询资料,并自己动手,实现了简单的路径分析. 下面就介绍具体的实现过程. 本篇文章最终结果是在 PostgreSQL 数据库中实现的,后续的可视化展示会继 ...
- postgresql+postgis+pgrouting安装步骤图解
1.在此(https://www.bigsql.org/postgresql/installers.jsp/)下载postgresql(开源数据库,gis行业推荐使用); 2.在此(http://wi ...
- WFS: postgresql(postgis)和shp文件查询效率对比
对GeoServer上的WFS的各种数据源查询效率感兴趣,做个测试.本次测试了Postgresql.geopackage.shp文件三种数据源的查询效率,无论是本机还是服务器环境,pg存储查询效率都比 ...
- OpenLayers 3+Geoserver+PostGIS实现点击查询
WebGIS开发中,点击查询是最经常使用的一种查询方式,在ArcGIS api 中.这样的查询叫IdentifyTask,主要作用是前台提交參数.交ArcServer查询分析返回. 本文从开源框架的角 ...
- PostGIS pgrouting路径分析
--让数据库支持PostGIS和pgRouting的函数和基础表(安装后第一次使用时执行,以后都不再执行) CREATE EXTENSION postgis; CREATE EXTENSION pgr ...
- PostgreSql+PostGIS和uDig的安装
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 总体来说,这两款开源软件均是很好安装的,一般按照提示一步一步 ...
随机推荐
- 跨域拦截Access-Control-Allow-Origin设置多个origin
在Extjs和java项目碰到了需要同时处理跨域,外部要访问后台接口的问题 原来的代码是这样,只能设置一个extjs前台需要过滤的跨域请求 package com.xgt.config; import ...
- android和Linux下getopt的差别
1. Linux下如果找不到相对应的参数,则会跳过继续找下一个 Android下如果找不到则会直接返回-1,跳出来 2. Linux下通过getopt后会把找到的元素放到数组的前面,没找到的往后移动( ...
- response提交原理(转)
摘自:http://blog.csdn.net/quechao123/article/details/6256653 http://jorton468.blog.163.com/blo ...
- 常用工具说明--强大的PostMan
PsotMan介绍和使用 Postman介绍 Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件.其主要功能包括: 模拟各种HTTP ...
- windows 下配置ndk环境,无需cygwin
时隔好久要用ndk编译jni库,本以为配制安装cygwin环境,便按部就班的下载安装,但是公司的网速真的不给力,三天安装了三四次都没有安装成功(我选择的是在线安装),于是我便开始查ndk的官网看看,发 ...
- Razor 将C#对象转换成Javascript对象, json还原被转码的字符 "·· HTML转义符
Razor 将C#对象转换成Javascript对象 在Razor中使用Json字符串,特殊字符被自动转义(如:\"->") @{ var jsonStr = Html.Ra ...
- 四:SpringThinking
一:将对象配置到容器 1.xml文件:空参构造 <bean name="user" class="com.spring.bean.User" scope= ...
- html--深入理解4种dom对象
这四个对象是从HTML结构中逐层深入的,分别代表了HTML结构中所有的内容: 1.Document对象 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们 ...
- asp.net 、C#实现微信企业号OAuth2认证
以微信企业号作为入口的应用,几乎都会遇到需要应用系统中个人信息和微信用户关联问题.从而进行其他业务处理.目前所做项目采取在企业号通讯录添加自定义字段存入应用系统用户信息表中唯一标识UserGuid进行 ...
- java 生成和解析xml
本文主要使用的是Jdom.jar包(包的下载百度一下)实现了生成xml文件和解析xml文件 下面是生成xml的实现 说明:stuLists集合是一个存放着Student对象的集合 import jav ...