ST_Segmentize — 返回修改后的几何图形/地理,其线段不长于给定距离。
geometry ST_Segmentize(
geometry geom, float max_segment_length)
;
geography ST_Segmentize(
geography geog, float max_segment_length)
;
返回修改后的几何图形/地理,其线段长度不超过 max_segment_length
。 线段长度以二维计算。 线段段总是被分成等长的子段。
对于几何形状,最大长度以空间参考系的单位表示。
对于地理来说,最大长度以米为单位。 距离是在球体上计算的。 添加的顶点是沿着线段端点定义的球面大圆弧创建的。
这只会缩短长线段。 它不会延长比最大长度短的线段。 |
对于包含长线段的输入,指定相对较短的 |
可用性:1.2.2
增强:3.0.0 分段几何现在可生成等长的子分段
增强:2.3.0 地理分段现在可生成等长的子分段
增强:2.1.0 引入了对地理的支持。
更改:2.1.0 由于引入了地理支持,使用 ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5)
会导致不明确的函数错误。 输入需要正确键入为几何或地理。 使用 ST_GeomFromText、ST_GeogFromText 或转换为所需类型(例如 ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )
)
分割一条线。 长段均分,短段不平均。
SELECT ST_AsText(ST_Segmentize( 'MULTILINESTRING((0 0, 0 1, 0 9),(1 10, 1 18))'::geometry, 5 ) ); --------------------------------------------------- MULTILINESTRING((0 0,0 1,0 5,0 9),(1 10,1 14,1 18))
多边形分割:
SELECT ST_AsText( ST_Segmentize(('POLYGON((0 0, 0 8, 30 0, 0 0))'::geometry), 10)); ------------------------------------------------------- POLYGON((0 0,0 8,7.5 6,15 4,22.5 2,30 0,20 0,10 0,0 0))
对地理线进行分段,最大分段长度为 2000 公里。 沿着连接端点的大圆弧添加顶点。
SELECT ST_AsText( ST_Segmentize(('LINESTRING (0 0, 60 60)'::geography), 2000000)); ------------------------------------------------------------- LINESTRING(0 0,4.252632294621186 8.43596525986862,8.69579947419404 16.824093489701564,13.550465473227048 25.107950473646188,19.1066053508691 33.21091076089908,25.779290201459894 41.01711439406505,34.188839517966954 48.337222885886,45.238153936612264 54.84733442373889,60 60)