postgis Multi類型轉(zhuǎn)simple類型

有些情況獲得的數(shù)據(jù)是Multi類型的,如MultiPolygon和MultiLineString類型,這些類型在空間計算上,很多函數(shù)都用不上。像如MultiLineString類型想進(jìn)行最短路徑查詢就比較不方便。postgis導(dǎo)入的時候能夠選擇simple類型,但是有時候就是導(dǎo)不進(jìn)去。


image.png
image.png

如上圖這種情況,其實就可以將這些多邊形進(jìn)行打散,進(jìn)行單獨處理。這就需要用到st_numgeometries和st_geometryN兩個函數(shù)了。

integer ST_NumGeometries(geometry geom);
Returns the number of Geometries. If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL.

SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));

st_numgeometries 計算Multi的單個數(shù)量

geometry ST_GeometryN(geometry geomA, integer n);

Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return NULL


SELECT
    n,
    ST_AsEWKT (ST_GeometryN(the_geom, n)) AS geomewkt
FROM
    (

        VALUES
            (
                ST_GeomFromEWKT (
                    'MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)'
                )
            ),
            (
                ST_GeomFromEWKT (
                    'MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))'
                )
            )
    ) AS foo (the_geom)
CROSS JOIN generate_series (1, 100) n
WHERE
    n <= ST_NumGeometries (the_geom);

ST_GeometryN 取index為 n的geometry

    SELECT st_geometryN(geom,n) from grid_class_sure_hex gcsh CROSS JOIN generate_series (1, 100) n where gcsh.name='aaaaa' and n <= ST_NumGeometries (gcsh.geom);
    
    --其中g(shù)enerate_series (1, 100)可以根據(jù)情況自己設(shè)置

最后的每個小的多邊形都可以點擊,是能夠達(dá)到效果的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容