postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑

准备一个线shp数据,并将其导入postgres里面,postgres安装postgis和pgrouting两个插件(方法见http://www.cnblogs.com/nidaye/p/4553522.html)。线数据的字段如下:注意字段的名称,省的出现不必要的麻烦。

1、ALTER TABLE beijing_line ADD COLUMN source integer;

ALTER TABLE beijing_line ADD COLUMN target integer;

ALTER TABLE beijing_line ADD COLUMN length double precision;

UPDATE beijing_line SET length = ST_Length(the_geom);

ps:执行createTopology这个函数之前一定得对数据库执行以下三句sql查询:

CREATE EXTENSION postgis;

CREATE EXTENSION postgis_topology;

CREATE EXTENSION fuzzystrmatch;

2、select pgr_createTopology(‘beijing_line‘,0.001,source:=‘source‘,id:=‘gid‘,target:=‘target‘,the_geom:=‘the_geom‘);

select pgr_createTopology(‘beijing_line‘,0.1,source:=‘source‘,id:=‘gid‘,target:=‘target‘,the_geom:=‘the_geom’);

把容差值设置的大一点,可能结果会好点

3、   SELECT * FROM pgr_dijkstra(‘

SELECT gid as id,

source::integer,

target::integer,

length::double precision as cost

FROM beijing_line‘,

30, 60, false, false);

无查询结果就执行下面这几个试一试,也可能是两点之间就没有路径

select source from beijing_line;

select target from beijing_line;

select length from beijing_line;

4、查询所经过的所有点:

SELECT st_astext(the_geom) FROM pgr_dijkstra(‘

SELECT gid AS id,

source::integer,

target::integer,

length::double precision AS cost

FROM beijing_line‘,

30, 60, false, false) as di

join beijing_line pt

on di.id2 = pt.gid;

5、将路径写入一个几何文件内:

SELECT seq, id1 AS node, id2 AS edge, cost,the_geom into dijkstra_res FROM pgr_dijkstra(‘

SELECT gid AS id,

source::integer,

target::integer,

length::double precision AS cost

FROM beijing_line‘,

30, 60, false, false) as di

join beijing_line pt

on di.id2 = pt.gid;

经历过以上的步骤,如果一切顺利,应该能看到结果,这里不再截图。这时初步的准备工作已经完成。

参考博文如下():

1、基于pgrouting的路径规划之一

2、pgrouting进行路径规划之入门二(1和2是一个求最短路径博文系列,挺不错的可以看看,但可能是因为机器配置环境的不同,原封不动的可能无法运行别人的代码,一定搞懂原理,然后可对前人的代码改进)

3、Pgrouting运用基础

4、使用pgrouting2.0求最短路径

时间: 2024-10-23 18:03:42

postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑的相关文章

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.

postgresql+postgis+pgrouting安装(windows10)

注:a.以下安装皆指windows系统 b.只要安装了postgis,pgrouting自带就安装上了 一.postgresql版本10.9,posttgis版本2.5,pgrouting版本2.6(三者版本必须对应!!!) --查看postgresql版本 show server_version; --查看postgis版本SELECT PostGIS_full_version(); --查看pgrouting版本select pgr_version(); 二.安装文件下载地址(点我下载),提

postgresql+postgis+pgrouting安装步骤图解

1.在此(https://www.bigsql.org/postgresql/installers.jsp/)下载postgresql(开源数据库,gis行业推荐使用); 2.在此(http://winnie.postgis.net/download/windows/pg94/)下载对应postgresql版本的postgis(postgresql数据库gis空间数据库插件); 3.可在第二步路径下找到pgrounting(空间数据库路径分析插件)下载地址. 安装步骤图解: 1.点击postgr

基于pgrouting的任意两点间的最短路径查询函数

前面文章介绍了如何利用postgresql创建空间数据库,建立空间索引和进行路径规划.但是在真实的场景中用户进行路径规划的时候都是基于经纬度数据进行路径规划的,因为用户根本不会知道道路上节点的ID.因此文本讲述如何查询任意两点间的最短路径. 一.定义函数名及函数参数 函数名定义为: pgr_fromAtoB 参数设置分别为: 输入为数据库表名,起点和终点的经纬度坐标 输出为:路段序号,gid号,道路名,消耗及道路集合体. IN tbl varchar, --数据库表名 IN x1 double

MySQL同PostgreSQL + PostGIS对比

MySQL同PostgreSQL对比 MySQL 相对来说比较年轻,首度出现在1994年.它声称自己是最流行的开源数据库.MySQL就是LAMP(用于Web开发的软件包,包括Linux.Apache及Perl/PHP/Python)中的M.构建在LAMP栈之上的大多数应用都会使用MySQL,包括那些知名的应用,如 WordPress.Drupal.Zend及phpBB等. 开始,MySQL的设计目标是成为一个快速的Web服务器后端,使用快速的索引序列访问方法(ISAM),不支持ACID.经过早期

PostgreSql+PostGIS和uDig的安装

1.前言 总体来说,这两款开源软件均是很好安装的,一般按照提示一步一步点击next等,就可以装好.当然,也有需要注意的地方.下面我大致介绍下两款软件的安装流程. 2.PostgreSql+PostGIS的安装 2.1下载地址 在官网http://www.postgresql.org/download/处可以下载到最新的PG版本. 2.2PostgreSql的安装流程 a.点击安装包exe b.点击开始安装 c.设置安装路径 d.设置用户名和密码以及监听端口 e. 选择运行时语言环境 网上有人说:

搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3

搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3 1         服务器搭建 使用Tomcat需要先安装Java.从Oracle官方网站下载Java最新版本: http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装完成Java后,需要配置环境变量.具体方法请自行百度.安装成功后可以下载服务器了. 从Tomcat官方网站下载最新的版本,在Windo

跟我一起读postgresql源码(十)——Executor(查询执行模块之——Scan节点(下))

接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_FunctionScanState, T_ValuesScanState, T_CteScanState, T_WorkTableScanState, T_ForeignScanState, T_CustomScanState, 8.SubqueryScan 节点 SubqueryScan节点的作用是以另

PostgreSQL 9.5.4数据库快速INSERT大量数据研究

PostgreSQL 9.5.4数据库快速INSERT大量数据研究 背景 在一些应用场景中,需要向Abase数据库中快速装入大量的数据,比如数据库迁移,SQL日志分析等.在PG上快速插入数据有几种方案,每种方案的效率怎么样?如何调优能加快的数据装载? 场景设定 SQL日志分析是一个采集JDBC日志.分析SQL.发送分析结果工具.在分析阶段,需要解析大量的JDBC日志,并把解析后的结构化结果装入数据库供后续处理.以分析阶段为实验场景,以解析JDBC日志(多个)为开始,以完成结构化数据装入(包过索引