• 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相关推荐

  1. pgr_createTopology正运行时卡死的解决

    网络拓扑分析执行时,sql服务器一直卡着不动 处理:添加函数中行的参数 这样既可运行成功.

  2. postgresql 新建decimal字段_postgresql路径规划插件pgrouting使用

    pgrouting是postgresql的路径规划拓展插件.支持用户使用数据库中的路网数据构建拓扑,并基于拓扑路网数据进行最短路径查询或耗费成本计算,并支持矩阵运算. pgrouting的官方文档见: ...

  3. GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询

    一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...

  4. python快递分拣_快递背后的黑科技,你造吗?

    快递背后的黑科技,你造吗? Ronny 2016年11月20日 暂无评论 阅读 2,335 次 导读 前几天双 11 下的单,都已经收到包裹了吧?为什么 2016 年双 11 的快递来得比以往都及时? ...

  5. PgRouting求解大数据量最短路径

    Pgrouting求解大数据量最短路径 实际工作中的一个场景,类似于要做一个像地图那样,指定起终点,给出所有可行路线,本来是自己实现的,使用图的深度优先算法,结果由于数据量太大了,直接把内存算崩了.我 ...

  6. postgis+geoserver+openlayers最短路径分析-学习记录bug

    学习postgis+geoserver+openlayers最短路径分析,记录遇到的奇奇怪怪的问题. 主要参考: https://www.cnblogs.com/giser-s/p/11599562. ...

  7. 用Postgis算最短路径(在任意位置选择起点终点)

    1.前言 阅读本文需要知道什么是shapfile,什么是路径分析,什么是GIS.相比Arcgis的路径分析功能,本文介绍的方法稍微复杂,需要注意的细节更多,但却是完全免费的.PostGis+QGIS+ ...

  8. PostGIS 路线规划

    ❤️通过SQL存储过程,利用PostGIS实现路线规划❤️ pgRouting扩展了PostgreSQL/PostGIS地理空间数据库,以提供地理空间路由功能. 文章目录 1.环境配置 2.导入shp ...

  9. POSTGIS路径规划的简单配置(数据库配置)

    欢迎关注我的博客For CR docker安装pgrouting是最方便的方法没有之一 所以我们使用docker安装pgrouting 0:需有docker环境 没有的请自行百度 0.1:必须使用拥有 ...

最新文章

  1. python sys模块作用_浅谈Python中的模块
  2. [Swift]LeetCode373. 查找和最小的K对数字 | Find K Pairs with Smallest Sums
  3. 从jquery源码中学习一些技巧
  4. 大数据征信需把控 数据源的“量”与“度”
  5. 控制台和Win32 API程序输出变量地址值
  6. 平台电商类的增长策略:从用户激励到养成类游戏
  7. NGINX生命周期-转
  8. SqlServer SqlParser 介绍及基本使用
  9. 批量打印pdf并合并_批量打印CAD图(无删减版)
  10. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp
  11. 计算机审计操作实验目的,计算机审计实验报告 满分原创!!.docx
  12. SPOJ QTREE
  13. Excel VBA简单使用——数据缺失处理
  14. 【建议收藏】货币交易信息爬取+筛选(Python附源码)
  15. Mac卸载creative cloud
  16. 软件测试 中静态测试与动态测试的区别
  17. PostgreSQL数据库——Pigsty grafana Ansible
  18. 从键盘输入字符串,按回车键结束,在第二行显示输入内容。
  19. 多系统导航电文下载与分析
  20. 我学过的一些PS基本操作

热门文章

  1. Qt用代码实现菜单栏(MenuBar)和工具栏(ToolBar)
  2. vue-devtools\shells\chrome 错误 无法为内容脚本加载 JavaScript“build/hook.js”。 无法加载清单。
  3. ICCV2019语义分割/UDA:ACE: Adapting to Changing Environments for Semantic SegmentationACE:适应变化环境下的语义分割
  4. 5款可以教你编程的游戏
  5. 【认知计算】认知风险管理
  6. OpenCV--030图像积方图算法
  7. python迅雷自动下载_Python3.x+迅雷x 自动下载高分电影的实现方法
  8. corei7 64 poky linux,Solved: arm-poky-linux - NXP Community
  9. 在线程中调用PJSIP中的呼叫出现提示注册线程pj_thread_register的解决方法
  10. 《Python编程:从入门到实践》读书笔记:第6章 字典