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

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.
主站蜘蛛池模板: 巍山| 保定市| 合作市| 烟台市| 漳平市| 湖南省| 河源市| 阳西县| 江永县| 东港市| 桦甸市| 陇川县| 上蔡县| 青州市| 平顶山市| 吉安市| 宝山区| 崇阳县| 乡宁县| 两当县| 光山县| 平山县| 平果县| 安西县| 孝义市| 三门峡市| 门源| 黄浦区| 贵州省| 孟连| 凤城市| 上蔡县| 拉萨市| 栾城县| 九江县| 阜康市| 含山县| 龙里县| 商南县| 普宁市| 凤冈县|