PostGIS拓撲:TOPOLOGY


數據准備:建立架構waterdataset,導入樣例供水管網數據shp文件,pipesectionmain管線表,fitting節點表。

 

1)創建與刪除拓撲

創建拓撲,CreateTopology(topo名稱,坐標系srid,容差值)

示例:通過現有空間數據表(讀取現有空間數據的坐標系)創建拓撲

SELECT topology.CreateTopology('topo', find_srid('waterdataset','fitting','geom'),0.001);

刪除拓撲,DropTopology(topo名稱)

示例:刪除建立的topo

SELECT topology.DropTopology('ma_topo');

示例:刪除建立的TopoGeometry字段

語法,DropTopoGeometryColumn(架構名,表名,字段名);

SELECT topology.DropTopoGeometryColumn('waterdataset', 'pipesectionmain', 'topo_geom');

2)往空拓撲中加載數據

ST_CreateTopoGeo(已創建的topo名稱,幾何集合)

例:通過現有的空間表數據填充拓撲,該方法只在空topo的時候可以使用,導入過一次后該方法不可再用。

注:需導入線數據,導入數據后會填充edge_data表,並用線的端點填充node表。

SELECT topology.ST_CreateTopoGeo('topo',(SELECT ST_Collect(geom) FROM waterdataset.pipesectionmain) );

3)建立TopoGeometry列

可在原空間數據表上加入,也可以單獨新建表加入。AddTopoGeometryColumn(topo名稱,表空間名,表名,字段名,幾何類型) ;

單獨建新表示例:

//創建表空間

CREATE SCHEMA watertopo_feature;

//創建要素表

CREATE TABLE watertopo_feature.fitting(gid serial, fid integer PRIMARY KEY);

在原空間數據管線表添加示例:

SELECT topology.AddTopoGeometryColumn('hkgwater_topo', 'waterdataset', ' pipesectionmain ', 'topo_geom', 'LINESTRING');

4)給空間數據表中的TopoGeometry列填充數據

填充數據會自動建立起幾何對象和topo對象的關系(會關聯更新relation表)。

示例:更新管線表中的TopoGeometry列

toTopoGeom(空間數據表幾何字段geom,自己建立的topo表空間,更新的layer_id,容差)

UPDATE waterdataset.pipesectionmain SET topo_geom = topology.toTopoGeom(geom, 'hkgwater_topo', 4, 0.001);

TopoGeometry存儲方式,(topology_id,layer_id ,id, type)

topology_id:建立的拓撲的id,存儲在topology表中

layer_id:建立的拓撲圖層的id,存儲在layer表中

id:對應空間數據表的gid

type:空間數據類型(1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection),我們管網中常用的簡單點為1,簡單線為2。

 

5)重復3~4步驟,給fitting節點表建立TopoGeometry列並填充數據,fitting表會建立起與node表的對應關系。

 

參考資料

官方文檔:http://postgis.net/docs/manual-dev/Topology.html#Topology_Processing

WIKI:http://trac.osgeo.org/postgis/wiki/UsersWikiPostgisTopology

示例:http://blog.mathieu-leplatre.info/use-postgis-topologies-to-clean-up-road-networks.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM