pgr_createTopology
- pgr_createTopology — pgRouting Manual (2.2)
1 pgr_createTopology 概述
函数作用:根据几何信息构建网络拓扑。
函数返回:
- 在网络拓扑图和顶点表建立好之后就OK了。
- 由于错误导致网络拓扑构建失败。
2 pgr_createTopology 参数说明
varchar pgr_createTopology(text edge_table, double precision tolerance,text the_geom:='the_geom', text id:='id',text source:='source',text target:='target',text rows_where:='true', boolean clean:=false)
拓扑创建函数接受以下参数:
edge_table:text,表名
tolerance:float8,误差缓冲值,两个点的距离在这个距离内,就算重合为一点。这个距离使用st_length计算
the_geom:text,该表的空间坐标字段
id:text,该表的主键
source:text,空间起点编号
target:text,空间终点编号
rows_where:text,条件选择子集或行。默认值为true,表示源或目标具有空值的所有行,否则将使用条件。
clean:text,每次执行都重建拓扑图,默认false
说明:
- 执行SQL后,数据库中会创建或更新soure、target字段。
- 如果索引不存在,将创建一个索引,以加快以下列的进程:id、the_geom、source、target。
函数返回:
当创建拓扑结果成功时:
则会自动创建出来一个新表,存储了节点信息,表名:<edge_table>_vertices_pgr.
填充顶点表的id和the_geom列。新表会自动生成id和the_geom列, 并填充数据。
引用顶点表的id填充边缘表的源列和目标列。即关联新表和旧表,新表的ID关联旧表的source和target。
当创建拓扑失败时:
- 找不到表中所需的列,或者该列的类型不合适。
- 生成的数据构造的条件不合适,貌似就是数据结构不合理,构造出的数据不对。
- source、target或者id相同。
- SRID无法确定。
3 The Vertices Table
新创建出来的点集表包涵函数pgr_analyzeGraph and pgr_analyzeOneway 。
新表结构为:
id: |
bigint 顶点的标识符。
|
---|---|
cnt: |
integer edge_table中引用此顶点的顶点数。See pgr_analyzeGraph.
|
chk: |
integer 指示顶点可能有问题。See pgr_analyzeGraph.
|
ein: |
integer edge_table中引用这个顶点的顶点数。See pgr_analyzeOneway.
|
eout: |
integer edge_table中引用该顶点作为输出的顶点数。See pgr_analyzeOneway.
|
the_geom: |
geometry Point geometry of the vertex:顶点的点几何。
|
4 SQL注意事项
4.1 参数使用顺序
当参数按形参中描述的顺序给出时,我们得到的结果与使用函数的最简单方法相同。
SELECT pgr_createTopology('edge_table', 0.001,'the_geom', 'id', 'source', 'target');
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 18 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------pgr_createtopology
--------------------OK
(1 row)
警告:
当参数没有按适当的顺序给出时,将会发生错误。
在这个例子中,表ege_table的列id作为几何列传递给函数,而几何列the_geom作为id列传递给函数。
SELECT pgr_createTopology('edge_table', 0.001,'id', 'the_geom');
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'id', 'the_geom', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: ----> PGR ERROR in pgr_createTopology: Wrong type of Column id:the_geom
NOTICE: Unexpected error raise_exceptionpgr_createtopology
--------------------FAIL
(1 row)
4.2 命名表示法
当使用命名表示法时,用默认值定义的参数可以省略,只要值与默认值匹配,并且参数的顺序不重要。
SELECT pgr_createTopology('edge_table', 0.001,the_geom:='the_geom', id:='id', source:='source', target:='target');pgr_createtopology
--------------------OK
(1 row)
SELECT pgr_createTopology('edge_table', 0.001,source:='source', id:='id', target:='target', the_geom:='the_geom');pgr_createtopology
--------------------OK
(1 row)
SELECT pgr_createTopology('edge_table', 0.001, source:='source');pgr_createtopology
--------------------OK
(1 row)
4.3 选择指定行
使用rows_where参数选择行,根据id选择行。
SELECT pgr_createTopology('edge_table', 0.001, rows_where:='id < 10');pgr_createtopology
--------------------OK
(1 row)
选择与id = 5行的几何图形相邻的行。
SELECT pgr_createTopology('edge_table', 0.001,rows_where:='the_geom && (SELECT st_buffer(the_geom, 0.05) FROM edge_table WHERE id=5)');pgr_createtopology
--------------------OK
(1 row)
Selecting the rows where the geometry is near the geometry of the row with gid
=100 of the table othertable
.
CREATE TABLE otherTable AS (SELECT 100 AS gid, st_point(2.5, 2.5) AS other_geom);
SELECT 1
SELECT pgr_createTopology('edge_table', 0.001,rows_where:='the_geom && (SELECT st_buffer(other_geom, 1) FROM otherTable WHERE gid=100)');pgr_createtopology
--------------------OK
(1 row)
5 示例
这个例子开始一个干净的拓扑,有5条边,然后增加到其余的边。
SELECT pgr_createTopology('edge_table', 0.001, rows_where:='id < 6', clean := true);
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'id < 6', clean := t)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 5 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------pgr_createtopology
--------------------OK
(1 row)SELECT pgr_createTopology('edge_table', 0.001);
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edge_table', 0.001, 'the_geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 13 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgr
NOTICE: ----------------------------------------------pgr_createtopology
--------------------OK
(1 row)
pgr_createTopology相关推荐
- pgr_createTopology正运行时卡死的解决
网络拓扑分析执行时,sql服务器一直卡着不动 处理:添加函数中行的参数 这样既可运行成功.
- postgresql 新建decimal字段_postgresql路径规划插件pgrouting使用
pgrouting是postgresql的路径规划拓展插件.支持用户使用数据库中的路网数据构建拓扑,并基于拓扑路网数据进行最短路径查询或耗费成本计算,并支持矩阵运算. pgrouting的官方文档见: ...
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...
- python快递分拣_快递背后的黑科技,你造吗?
快递背后的黑科技,你造吗? Ronny 2016年11月20日 暂无评论 阅读 2,335 次 导读 前几天双 11 下的单,都已经收到包裹了吧?为什么 2016 年双 11 的快递来得比以往都及时? ...
- PgRouting求解大数据量最短路径
Pgrouting求解大数据量最短路径 实际工作中的一个场景,类似于要做一个像地图那样,指定起终点,给出所有可行路线,本来是自己实现的,使用图的深度优先算法,结果由于数据量太大了,直接把内存算崩了.我 ...
- postgis+geoserver+openlayers最短路径分析-学习记录bug
学习postgis+geoserver+openlayers最短路径分析,记录遇到的奇奇怪怪的问题. 主要参考: https://www.cnblogs.com/giser-s/p/11599562. ...
- 用Postgis算最短路径(在任意位置选择起点终点)
1.前言 阅读本文需要知道什么是shapfile,什么是路径分析,什么是GIS.相比Arcgis的路径分析功能,本文介绍的方法稍微复杂,需要注意的细节更多,但却是完全免费的.PostGis+QGIS+ ...
- PostGIS 路线规划
❤️通过SQL存储过程,利用PostGIS实现路线规划❤️ pgRouting扩展了PostgreSQL/PostGIS地理空间数据库,以提供地理空间路由功能. 文章目录 1.环境配置 2.导入shp ...
- POSTGIS路径规划的简单配置(数据库配置)
欢迎关注我的博客For CR docker安装pgrouting是最方便的方法没有之一 所以我们使用docker安装pgrouting 0:需有docker环境 没有的请自行百度 0.1:必须使用拥有 ...
最新文章
- python sys模块作用_浅谈Python中的模块
- [Swift]LeetCode373. 查找和最小的K对数字 | Find K Pairs with Smallest Sums
- 从jquery源码中学习一些技巧
- 大数据征信需把控 数据源的“量”与“度”
- 控制台和Win32 API程序输出变量地址值
- 平台电商类的增长策略:从用户激励到养成类游戏
- NGINX生命周期-转
- SqlServer SqlParser 介绍及基本使用
- 批量打印pdf并合并_批量打印CAD图(无删减版)
- Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp
- 计算机审计操作实验目的,计算机审计实验报告 满分原创!!.docx
- SPOJ QTREE
- Excel VBA简单使用——数据缺失处理
- 【建议收藏】货币交易信息爬取+筛选(Python附源码)
- Mac卸载creative cloud
- 软件测试 中静态测试与动态测试的区别
- PostgreSQL数据库——Pigsty grafana Ansible
- 从键盘输入字符串,按回车键结束,在第二行显示输入内容。
- 多系统导航电文下载与分析
- 我学过的一些PS基本操作
热门文章
- Qt用代码实现菜单栏(MenuBar)和工具栏(ToolBar)
- vue-devtools\shells\chrome 错误 无法为内容脚本加载 JavaScript“build/hook.js”。 无法加载清单。
- ICCV2019语义分割/UDA:ACE: Adapting to Changing Environments for Semantic SegmentationACE:适应变化环境下的语义分割
- 5款可以教你编程的游戏
- 【认知计算】认知风险管理
- OpenCV--030图像积方图算法
- python迅雷自动下载_Python3.x+迅雷x 自动下载高分电影的实现方法
- corei7 64 poky linux,Solved: arm-poky-linux - NXP Community
- 在线程中调用PJSIP中的呼叫出现提示注册线程pj_thread_register的解决方法
- 《Python编程:从入门到实践》读书笔记:第6章 字典