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.前言 总体来说,这两款开源软件均是很好安装的,一般按照提示一步一步 ...
随机推荐
- C 标准库 - string.h之strcpy使用
strcpy Copies the C string pointed by source into the array pointed by destination, including the te ...
- UEditor编辑器 字符数统计和字符数限制 问题
1.百度UEditor修改右下角统计字数默认只统计前台所见的文字个数,为了便于展示实际保存的时候是保存的包含html标签的,所以右下角的统计字数功能需要修改 getContentLength: fun ...
- JavaScript call 和apply 的理解
这两个方法对于一些新手而言难耐弄清他们到底是怎么回事,对我我来讲我对call和apply的方法理解的也比较含糊.今天闲来无事准备彻底搞call和apply到底是怎么回事.本着互联网分享精神.我将我自己 ...
- JMS - ActiveMQ集成Spring
下面是ActiveMQ官网提供的文档.http://activemq.apache.org/spring-support.html 下面是我添加的一些dependency: <!-- jms a ...
- spring整合springmvc和mybatis
1.spring 1.1 jar包 1.2 spring基本配置,包扫描注解 <!-- 自动扫描 --> <context:component-scan base-package=& ...
- vue.js开发之开关(switch)组件
最近开发组件的时候,自定义开发了开关(switch)组件,现将代码整理如下,方便日后复用. toggle-switch.vue <template> <label role=&quo ...
- ORA-12541:TNS-12560:ORA-12518:ORA-28040:ORA-01017
说明 环境(参考): Oracle 12c SQL Developer/Navicat Premium(64位)连接数据库 后续出现的错误代码: ORA-12541: no listener TNS- ...
- 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台
一. 开发环境 1. 点击此查看并下载需要的 Eclipse IDE for Java EE Developers 开发工具,依赖于java,推荐选用32位 2. 点击此查看并下载需要的 MySQ ...
- 设计模式入门,命令模式,c++代码实现
// test06.cpp : Defines the entry point for the console application.////设计模式第5章 命令模式#include "s ...
- Django 模型层之单表操作
一.单表操作之创建表 在app的models.py文件中创建模型: from django.db import models class Book(models.Model): id = models ...