基于pgrouting的路径规划之一

最近接触pgrouting。把学习的结果记录下来。

利用pgrouting进行路径规划只能导入line数据,mutiline会出错。这一点在进行数据导入的时候需要注意。

一、创建数据库

有两种方法:

1.pgadmin可视化工具创建

直接把数据道路postgis模版数据库或以postgis模版数据库为模版创建数据库,这样创建的数据库直接支持空间查询和空间分析。

2.命令行创建数据库

创建数据库

createdb -U postgres routing

让数据库支持PostGIS和pgRouting的函数和基础表

psql –U postgres –d routing –f postgis.sql

psql –U postgres –d routing –fspatial_ref_sys.sql

psql –U postgres –d routing –frouting_core.sql

psql –U postgres –d routing –frouting_core_wrappers.sql

psql –U postgres –d routing –frouting_topology.sql

在windows环境下可以粘贴相应的sql文件中代码在对应表中直接执行

二、把shp数据导入空间数据库

两种方式:

1.是用可视化工具

(a)打开postgis工具

postgis安装目录下的PostGISShapefile Import/Export Manager

会弹出对话框

(b)设置数据库连接

单击view connection details,设置数据库的连接

(c)添加shp数据

添加需要导入的shp文件

单击Add File ,会弹出文件选中对话框

选择需要导入是shp文件,注意此处路径一定要是英文,否则会导入失败

(d)编码设置

单击options,设备编码格式为GBK,选中generate simple geometries instead of multi geometries。

此处导入的shp数据一定要是单线的,否则无法完成路径计算。

(e)查看导入数据

成功导入数据之后就能在postgresql中看到导入的数据表

2.命令行导入数据

先用shp2psql.exe程序把shp文件装换成sql脚本,

格式为:shp2pgsql    路径\shp数据文件名 新建的数据表名 > 路径\SQL文件名.sql

shp2pgsql -s 4326 beijingmodified public.beijingmodified > beijingmodified.sql

执行得到的sql文件

psql -U postgres -d routing -fbeijingmodified.sql

三、创建路网拓扑结构

//添加起点id

ALTER TABLE public.beijing ADD COLUMNsource integer;

//添加终点id

ALTER TABLE public.beijing ADD COLUMNtarget integer;

//添加道路权重值

ALTER TABLE public.beijing ADD COLUMNlength double precision;

//为sampledata表创建拓扑布局,即为source和target字段赋值

SELECT pgr_createTopology(public.beijing,0.00001, ‘geom‘, ‘gid‘);

//为source和target字段创建索引

CREATE INDEX source_idx ONbeijingmodified("source");

CREATE INDEX target_idx ONbeijingmodified("target");

//为length赋值

update beijingmodified set length =st_length(geom);

//或者用已有的字段长度赋值,下面shape_length为shp中已有的长度属性

UPDATE beijingmodified SET length = shape_length;

//为beijingmodified表添加reverse_cost字段并用length的值赋值

ALTER TABLE beijingmodified ADD COLUMNreverse_cost double precision;

UPDATE beijingmodified SET reverse_cost =length;

四、尝试查询

使用pgr_dijkstra算法查询

SELECT seq, id1 AS node, id2 AS edge, costFROM pgr_dijkstra(‘

SELECT gid AS id,

source::integer,

target::integer,

length::double precision AS cost

FROM beijingmodified‘,

30, 60, false, false);

//把查询结果放在新建的表格中

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

SELECT gid AS id,

source::integer,

target::integer,

length::double precision AS cost

FROM beijingmodified‘,

30, 60, false, false) as di

join beijingmodified pt

on di.id2 = pt.gid;

/*

pgr_dijkstra的定义是pgr_costResult[]

pgr_dijkstra(textsql, integer source, integer target, boolean directed, boolean has_rcost);

directed是否限制方向,has_ rcost作用未知,返回值为pgr_costResult。

pgr_costResult在workshop中的解释是

A set of records to describe a path resultwith cost attribute

一组带有消耗属性的用于描述路径结果的记录的集合。

其定义如下

CREATE TYPE pgr_costResult AS

(

seq integer, -- rowsequence

id1 integer, -- node ID

id2 integer, -- edge ID(-1 for the last row)

cost float8 -- cost totraverse from id1 using id2

);

*/

将这个表导出为shp,再在arcmap中定义坐标系打开,可以看到上面的结果如下图所示

时间: 2024-08-24 15:30:25

基于pgrouting的路径规划之一的相关文章

pgrouting进行路径规划之入门二

本文是在上一篇文章的基础上的.数据入库和字段设置请参考上篇文章.本文介绍利用pgrouting中其他方法来求取最短路径. 一.添加属性字段 为表格beijingmodified添加x1,y1,x2,y2字段 ALTER TABLE beijingmodified ADD COLUMN x1double precision; ALTER TABLE beijingmodified ADD COLUMN y1double precision; ALTER TABLE beijingmodified

基于分层路网的路径规划算法

http://www.docin.com/p-1308678703.html 路径规划一般包括如下几种情况: 最短路径规划 最短时间规划 最经济规划 通过赋予图中的边以不同的权值来满足用户不同的需求 最短路径由于普通道路限速问题,未必是最短时间到达目的地, 可能上高速更快一些 分层思想 对于一个点P,以自身为中心,不断的扩大半径进行搜索,查看当前是否包括一个升级到高层路网的节点 如果有,说明当设置P为起点,然后设置T为终点,而且当distance(pt)> R,说明应该进行路网的升层 选择一个查

python实现基于百度路径规划接口的坐标对获取两点驾车距离的计算

今天为大家介绍一种通过python实现坐标对间距离数据的获取方法.接口采用百度开发的路径规划接口. 1.调用接口: 接口:(传入起点坐标串,结束坐标串:ak值需要注册百度开发者) 接口详细说明 http://api.map.baidu.com/direction/v2/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK //GET请求 2.AK值获取: 注册成为开发者后需要添加应用,添加服务

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

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

路径规划

机器人路径规划研究综述 1.什么是路径规划 路径规划技术是机器人研究领域中的一个重要分支.所谓机器人的最优路径规划问题,就是依据某个或某些优化准则(如工作代价最小,行走路线最短,行走时间最短等),在其工作空间中找到一条从起始状态到目标状态的能避开障碍物的最优路径. 依据某种最优准则,在工作空间中寻找一条从起始状态到目标状态的避开障碍物的最优路径. 需要解决的问题: 1.始于初始点止于目标点. 2.避障. 3.尽可能优化的路径. 2.路径规划技术分类 a.静态结构化环境下的路径规划,比如说slam

PRM路径规划算法

路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法:如人工势场法.单元分解法.随机路标图(PRM)法.快速搜索树(RRT)法等.传统的人工势场.单元分解法需要对空间中的障碍物进行精确建模,当环境中的障碍物较为复杂时,将导致规划算法计算量较大.基于随机采样技术的PRM法可以有效解决高维空间和复杂约束中的路径规划问题. PRM是一种基于图搜索的方法,它将连续空间转换成离散空间,再利用A*等搜索算法在路线图上寻找路径,以提高搜索效率.这种方法能用相对少的随机采样点来找到

RRT路径规划算法概述

本文主要记录本人之前调研过在三维复杂环境下的路径规划算法. RRT快速随机搜索树 快速扩展随机树(Rapidly-exploring Random Trees,RRT)算法,是近十几年得到广泛发展与应用的基于采样的运动规划算法,它由美国爱荷华州立大学的Steven M. LaValle教授在1998 年提出.RRT 算法是一种在多维空间中有效率的规划方法.原始的RRT 算法是通过一个初始点作为根节点,通过随机采样,增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目

路径规划算法总结

路径规划(Path Planning)算法总结 不同的路径规划算法 Classical Approach Artificial Intelligence (Heuristic Approach) Potential Field.(1979) Neural Network Technique. (1943) Roadmap Cell Decomposition.(1987) Fuzzy Logic Technique. (1965) Grid Based.(1988) Genetic Algori

【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status][Discuss] Description 相信大家都用过地图上的路径规划功能,只要输入起点终点就能找出一条最优路线.现在告诉你一张地图的信息,请你找出最优路径(即最短路径).考虑到实际情况,一辆车加满油能开的时间有限,所以在地图上增加了几个加油站. 地图由点和双向边构成,每个点代表一个路口,也有可