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

  • Mastering PostGIS
  • Dominik Mikiewicz Michal Mackiewicz Tomasz Nycz
  • 233字
  • 2021-07-02 22:52:26

LineString decomposition

This process is also similar to MultiPoint decomposition. The points can be extracted one at a time or dumped into a geometry dump. Aside from these generic methods, there are also special functions for finding the start or end point of a line.

  1. First, let's find the count of the vertices in a LineString. A generic ST_NPoints function can be used for that:
        SELECT
ST_NPoints(ST_MakeLine(ST_MakePoint(20,50),
ST_MakePoint(19.95,49.98)));


2
The ST_NPoints works for any geometry type--not just for LineStrings, but also LinearRings, polygons, their multi-variants, and even for points, in which case it will return 1. There is also a ST_NumPoints function, which works for LineStrings only.

The individual points are extracted from a LineString by the ST_PointN function, which is not unlike ST_GeometryN used for Multi-geometry decomposition.

        SELECT 
ST_AsText(ST_PointN(ST_MakeLine(ARRAY[
ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.96)]),2));


POINT(19.95 49.98)
  1. Dumping the points into a set of rows is also similar to dumping a Multi-geometry. The only difference is that the function used is named ST_DumpPoints. The geometry dump compound type is a direct output from this function:
        SELECT
ST_DumpPoints(ST_MakeLine(ARRAY[
ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.96)]));


st_dumppoints
--------------------------------------------------
({1},010100000000000000000034400000000000004940)
({2},01010000003333333333F333403D0AD7A370FD4840)
({3},01010000006666666666E633407B14AE47E1FA4840)
  1. And for accessing the vertices' geometry, we can do the following:
         SELECT 
(ST_DumpPoints(ST_MakeLine(ARRAY[
ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.96)]))).geom;
geom
--------------------------------------------
010100000000000000000034400000000000004940
01010000003333333333F333403D0AD7A370FD4840
01010000006666666666E633407B14AE47E1FA4840
  1. Finally, there are specialized methods for finding the first and last vertices of LineStrings. They are named ST_StartPoint and ST_EndPoint:
        SELECT
ST_AsText(ST_StartPoint(ST_MakeLine(ARRAY[
ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.96)])));


POINT(20 50)

SELECT
ST_AsText(ST_EndPoint(ST_MakeLine(ARRAY[
ST_MakePoint(20,50),ST_MakePoint(19.95,49.98),
ST_MakePoint(19.90,49.96)])));


POINT(19.9 49.96)
主站蜘蛛池模板: 贺州市| 新泰市| 昔阳县| 崇仁县| 景德镇市| 嘉兴市| 三门峡市| 湘潭县| 绥宁县| 广汉市| 霍邱县| 安平县| 拉萨市| 通许县| 泾源县| 耒阳市| 吉木乃县| 迭部县| 云霄县| 鲁甸县| 屏山县| 通渭县| 五大连池市| 东阳市| 若羌县| 元氏县| 江北区| 中卫市| 吴堡县| 静安区| 浦江县| 沂源县| 江安县| 玉山县| 庆安县| 乃东县| 平乐县| 屏东市| 高邑县| 共和县| 玉门市|