官术网_书友最值得收藏!

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.
主站蜘蛛池模板: 马山县| 枣庄市| 万源市| 韶关市| 兰溪市| 博湖县| 唐河县| 宁海县| 大关县| 都江堰市| 武冈市| 衡南县| 丹巴县| 秀山| 调兵山市| 和硕县| 伊春市| 佛山市| 周至县| 淮北市| 漳平市| 驻马店市| 周口市| 仁化县| 上高县| 治多县| 北京市| 赤城县| 白河县| 勐海县| 台东市| 渭南市| 双桥区| 蓬安县| 湛江市| 五台县| 安新县| 开阳县| 虞城县| 天津市| 淅川县|