書名: Mastering PostGIS作者名: Dominik Mikiewicz Michal Mackiewicz Tomasz Nycz本章字數: 182字更新時間: 2021-07-02 22:52:26
Polygon decomposition
There are two levels of polygon geometry decomposition: they can be broken down either into LineStrings or into points. Decomposition into points is very similar to decomposition of a LineString: the ST_DumpPoints is used:
SELECT ST_DumpPoints(
ST_MakePolygon(
ST_MakeLine(ARRAY[ST_MakePoint(20,50),ST_MakePoint(19.95,49.98), ST_MakePoint(19.90,49.90),ST_MakePoint(20,50)]),
ARRAY[ST_MakeLine(ARRAY[ST_MakePoint(19.95,49.97),ST_MakePoint(19.943,49.963), ST_MakePoint(19.955,49.965),ST_MakePoint(19.95,49.97)])]
)
);
st_dumppoints
------------------------------------------------------
("{1,1}",010100000000000000000034400000000000004940)
("{1,2}",01010000003333333333F333403D0AD7A370FD4840)
("{1,3}",01010000006666666666E633403333333333F34840)
("{1,4}",010100000000000000000034400000000000004940)
("{2,1}",01010000003333333333F333405C8FC2F528FC4840)
("{2,2}",0101000000C520B07268F133402506819543FB4840)
("{2,3}",010100000014AE47E17AF43340EC51B81E85FB4840)
("{2,4}",01010000003333333333F333405C8FC2F528FC4840)
There's a slight difference in the geometry dump format: the path array now consists of two numbers. The first one is the index of the ring (1 being the exterior ring, and the following numbers the subsequent interior rings), and the second is the index a of point in the ring.
For extracting whole rings, PostGIS offers the following possibilities:
- Dumping the rings into a set of rows. For that, ST_DumpRings is used:
SELECT ST_DumpRings(
ST_MakePolygon(
ST_MakeLine(ARRAY[ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.90),ST_MakePoint(20,50)]),
ARRAY[ST_MakeLine(ARRAY[ST_MakePoint(19.95,49.97),ST_MakePoint
(19.943,49.963),
ST_MakePoint(19.955,49.965),ST_MakePoint(19.95,49.97)])]
)
);
st_dumprings
----------------------------------
({1},01030000000100000004000000(...)
- Extracting the exterior ring:
SELECT ST_ExteriorRing(
ST_MakePolygon(
ST_MakeLine(ARRAY[ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.90),ST_MakePoint(20,50)]),
ARRAY[ST_MakeLine(ARRAY[ST_MakePoint(19.95,49.97),
ST_MakePoint(19.943,49.963),ST_MakePoint(19.955,49.965),
ST_MakePoint(19.95,49.97)])]
)
);
st_exteriorring
--------------------------
01020000000400000000(...)
- Extracting the interior rings based on their index:
SELECT ST_InteriorRingN(
ST_MakePolygon(
ST_MakeLine(ARRAY[ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.90),ST_MakePoint(20,50)]),
ARRAY[ST_MakeLine(ARRAY[ST_MakePoint(19.95,49.97),
ST_MakePoint(19.943,49.963),
ST_MakePoint(19.955,49.965),ST_MakePoint(19.95,49.97)])]
), 1
);
st_interiorringn
---------------------------
010200000004000000333(...)

Interior ring extracted from a polygon.
推薦閱讀
- 機器學習實戰(zhàn):基于Sophon平臺的機器學習理論與實踐
- Word 2003、Excel 2003、PowerPoint 2003上機指導與練習
- 工業(yè)機器人產品應用實戰(zhàn)
- Deep Learning Quick Reference
- 大數據專業(yè)英語
- 商戰(zhàn)數據挖掘:你需要了解的數據科學與分析思維
- Maya 2012從入門到精通
- 大數據挑戰(zhàn)與NoSQL數據庫技術
- 永磁同步電動機變頻調速系統(tǒng)及其控制(第2版)
- Prometheus監(jiān)控實戰(zhàn)
- 運動控制系統(tǒng)
- MCGS嵌入版組態(tài)軟件應用教程
- SMS 2003部署與操作深入指南
- 自適應學習:人工智能時代的教育革命
- 運動控制系統(tǒng)