ST_OFFSETCURVE
📄字数 2.9K
👁️阅读量 加载中...
功能描述
返回距输入线给定距离和方向的偏移线。
语法格式
sql
GEOMETRY ST_OFFSETCURVE(GEOMETRY line, DOUBLE signed_distance, varchar style_parameters='');参数说明
- line:目标 LINE 对象。
- signed_distance:距离
- style_parameters:样式参数,以空格分隔的键=值对字符串。可选,默认为 NULL。
- 'quad_segs=#' :用于近似四分之一圆的线段数(默认为 8)。
- 'join=round|mitre|bevel' :连接样式(默认为“round”)。
- 'mitre_limit=#.#' :斜接比率限制,仅影响斜接连接样式。
函数返回类型
GEOMETRY 类型
使用说明
- 返回几何图形的所有点与输入几何图形的距离不超过给定距离。
- 对于计算围绕中心线的平行线很有用。
- 对于正距离,偏移位于输入线的左侧并保持相同的方向。 对于负距离,它位于右侧且方向相反。
- 距离单位以空间参考系的单位来测量。
- 请注意,对于某些拼图形状的输入几何图形,输出可能是 MULTILINESTRING 或 EMPTY。
- 此函数是由 GEOS 模块执行的。
- 此函数忽略 Z 维度。 即使在 3D 几何体上使用时,它也始终给出 2D 结果。
示例
15、'quad_segs=4 join=round' 原始线及其偏移 15 个单位:
sql
SQL> 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'));
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPR1 |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| LINESTRING(164 1,18 1,15.073645169758077 1.288220793951544,12.259748514523654 2.141807012330698,9.66644650470597 3.527955815461818,7.393398282201788 5.393398282201788,5.393398282201788 7.393398282201788,3.527955815461818 9.66644650470597,2.141807012330696 12.259748514523654,1.288220793951544 15.073645169758075,1 18,1 195) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
(1 row)-15, 'quad_segs=4 join=round' 原始线及其偏移量-15个单位:
sql
SQL> SELECT ST_AsText(ST_OffsetCurve(geom,
-15, 'quad_segs=4 join=round')) As notsocurvy
FROM (SELECT 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(164 31,31 31,31 195) |
+---------------------------------+
(1 row)双偏移以获得更多曲线,请注意第一个反转方向,因此 -30+15 = -15:
sql
SQL> SELECT ST_AsText(ST_OffsetCurve(ST_OffsetCurve(geom,
-30, 'quad_segs=4 join=round'), -15, 'quad_segs=4 join=round')) As morecurvy
FROM (SELECT 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 61,61 61,61 195) |
+---------------------------------+
(1 row)双偏移以获得更多曲线,与常规偏移 15 结合以获得平行线。 与原图重叠。
sql
SQL> 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 (SELECT 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,15.073645169758077 1.288220793951544,12.259748514523654 2.141807012330698,9.66644650470597 3.527955815461818,7.393398282201788 5.393398282201788,5.393398282201788 7.393398282201788,3.527955815461818 9.66644650470597,2.141807012330696 12.259748514523654,1.288220793951544 15.073645169758075,1 18,1 195),(164 61,61 61,61 195)) |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
(1 row)15、'quad_segs=4 join=bevel' 显示为原始线:
sql
SQL> 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'));
+-----------------------------------------------------------------------------------------------------------+
| EXPR1 |
+-----------------------------------------------------------------------------------------------------------+
| LINESTRING(164 1,18 1,7.393398282201788 5.393398282201788,5.393398282201788 7.393398282201788,1 18,1 195) |
+-----------------------------------------------------------------------------------------------------------+
(1 row)5、-15收集,join=mitre mitre_limit=2.1
sql
SQL> 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 (SELECT 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);
+------------------------------------------------------------------------------------------------+
| EXPR1 |
+------------------------------------------------------------------------------------------------+
| MULTILINESTRING((164 1,11.786796564403577 1,1 11.786796564403577,1 195),(164 31,31 31,31 195)) |
+------------------------------------------------------------------------------------------------+
(1 row)