Name

ST_OffsetCurve — 返回距输入线给定距离和方向的偏移线。

Synopsis

geometry ST_OffsetCurve(geometry line, float signed_distance, text style_parameters='');

描述

返回距输入线给定距离和方向的偏移线。 返回几何图形的所有点与输入几何图形的距离不超过给定距离。 对于计算围绕中心线的平行线很有用。

对于正距离,偏移位于输入线的左侧并保持相同的方向。 对于负距离,它位于右侧且方向相反。

距离单位以空间参考系的单位来测量。

请注意,对于某些拼图形状的输入几何图形,输出可能是 MULTILINESTRING 或 EMPTY。

可选的第三个参数允许指定空白分隔的键=值对的列表来调整操作,如下所示:

  • 'quad_segs=#' :用于近似四分之一圆的线段数(默认为 8)。

  • 'join=round|mitre|bevel' :连接样式(默认为“round”)。 “mitre”也被认为是“mitre”的同义词。

  • 'mitre_limit=#.#' :斜接比率限制(仅影响斜接连接样式)。 “miter_limit”也被接受为“mitre_limit”的同义词。

这个函数是由 GEOS 模块执行的。

在 GEOS 3.11 中,行为发生了变化,因此在正负偏移下,偏移曲线与输入线具有相同的方向。

可用性:2.0

增强:2.5 - 添加了对 GEOMETRYCOLLECTION 和 MULTILINESTRING 的支持

[Note]

此函数忽略 Z 维度。 即使在 3D 几何体上使用时,它也始终给出 2D 结果。

示例

计算道路周围的开放缓冲区

SELECT ST_Union(
 ST_OffsetCurve(f.geom,  f.width/2, 'quad_segs=4 join=round'),
 ST_OffsetCurve(f.geom, -f.width/2, 'quad_segs=4 join=round')
) as track
FROM someroadstable;

                

15、'quad_segs=4 join=round' 原始线及其偏移 15 个单位。

SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)'),
    15, 'quad_segs=4 join=round'));

output

LINESTRING(164 1,18 1,12.2597485145237 2.1418070123307,
    7.39339828220179 5.39339828220179,
    5.39339828220179 7.39339828220179,
    2.14180701233067 12.2597485145237,1 18,1 195)
                

-15, 'quad_segs=4 join=round' 原始线及其偏移量-15个单位

SELECT ST_AsText(ST_OffsetCurve(geom,
    -15, 'quad_segs=4 join=round')) As notsocurvy
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;

notsocurvy

LINESTRING(31 195,31 31,164 31)
                

双偏移以获得更多曲线,请注意第一个反转方向,因此 -30+15 = -15

SELECT ST_AsText(ST_OffsetCurve(ST_OffsetCurve(geom,
    -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')) As morecurvy
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;

morecurvy

LINESTRING(164 31,46 31,40.2597485145236 32.1418070123307,
35.3933982822018 35.3933982822018,
32.1418070123307 40.2597485145237,31 46,31 195)
                

双偏移以获得更多曲线,与常规偏移 15 结合以获得平行线。 与原图重叠。

SELECT ST_AsText(ST_Collect(
    ST_OffsetCurve(geom, 15, 'quad_segs=4 join=round'),
    ST_OffsetCurve(ST_OffsetCurve(geom,
    -30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')
    )
) As parallel_curves
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;

parallel curves

MULTILINESTRING((164 1,18 1,12.2597485145237 2.1418070123307,
7.39339828220179 5.39339828220179,5.39339828220179 7.39339828220179,
2.14180701233067 12.2597485145237,1 18,1 195),
(164 31,46 31,40.2597485145236 32.1418070123307,35.3933982822018 35.3933982822018,
32.1418070123307 40.2597485145237,31 46,31 195))
                

15、'quad_segs=4 join=bevel' 显示为原始线

SELECT ST_AsText(ST_OffsetCurve(ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)'),
        15, 'quad_segs=4 join=bevel'));

output

LINESTRING(164 1,18 1,7.39339828220179 5.39339828220179,
    5.39339828220179 7.39339828220179,1 18,1 195)
                

15、-15收集,join=mitre mitre_limit=2.1

SELECT ST_AsText(ST_Collect(
    ST_OffsetCurve(geom, 15, 'quad_segs=4 join=mitre mitre_limit=2.2'),
    ST_OffsetCurve(geom, -15, 'quad_segs=4 join=mitre mitre_limit=2.2')
    ) )
    FROM ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104 16,84 16,64 16,
    44 16,24 16,20 16,18 16,17 17,
    16 18,16 20,16 40,16 60,16 80,16 100,
    16 120,16 140,16 160,16 180,16 195)') As geom;

output

MULTILINESTRING((164 1,11.7867965644036 1,1 11.7867965644036,1 195),
    (31 195,31 31,164 31))
                

相关信息

ST_Buffer