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

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.
主站蜘蛛池模板: 沅江市| 普兰店市| 吉林省| 阿合奇县| 丰都县| 屯门区| 武宁县| 抚顺市| 冕宁县| 丹江口市| 陕西省| 犍为县| 南郑县| 深圳市| 孝昌县| 霸州市| 清水河县| 泉州市| 合山市| 和龙市| 昌江| 二连浩特市| 乡宁县| 固始县| 怀安县| 大足县| 文水县| 和林格尔县| 平阳县| 崇州市| 汉源县| 盐源县| 蒙自县| 麻栗坡县| 聂荣县| 临沭县| 邵武市| 东阳市| 大同市| 安国市| 敖汉旗|