c语言sscanf函数的用法是什么
277
2022-08-22
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。
函数返回:
当创建拓扑结果成功时:
则会自动创建出来一个新表,存储了节点信息,表名:
当创建拓扑失败时:
找不到表中所需的列,或者该列的类型不合适。生成的数据构造的条件不合适,貌似就是数据结构不合理,构造出的数据不对。source、target或者id相同。SRID无法确定。
3 The Vertices Table
新创建出来的点集表包涵函数pgr_analyzeGraph and pgr_analyzeOneway 。
新表结构为:
id: | |
cnt: | |
chk: | |
ein: | |
eout: | |
the_geom: | |
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 edgesNOTICE: Rows with NULL geometry or NULL id: 0NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgrNOTICE: ---------------------------------------------- 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_geomNOTICE: Unexpected error raise_exception pgr_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 1SELECT 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 edgesNOTICE: Rows with NULL geometry or NULL id: 0NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgrNOTICE: ---------------------------------------------- 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 edgesNOTICE: Rows with NULL geometry or NULL id: 0NOTICE: Vertices table for table public.edge_table is: public.edge_table_vertices_pgrNOTICE: ---------------------------------------------- pgr_createtopology -------------------- OK(1 row)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~