尝试使用 postgis 创建一条包含两条平行线的路线

Trying to create a route with two parallel lines with postgis

所以我刚开始使用 SQL 和 PostGIS。对于本练习,我需要创建一个带有主键和几何字段的 table。


Insert into paradezug Values (1,ST_Transform( st_linefromtext('linestring(13.40044325726135 52.51884104088853 , 13.40109986093854 52.51827594967714)',4326),25833));

Insert into paradezug Values (2,ST_Transform( st_linefromtext('LineString(13.40109986093854 52.51827594967714 , 13.39917356833286 52.51769543984515)',4326),25833));

Insert into paradezug Values (3,ST_Transform( st_linefromtext('linestring(13.39917356833286 52.51769543984515 , 13.37837611723877 52.5162977964313)',4326),25833));

这很好用,给了我可以在 QGIS 中导入和查看的路线。

现在我必须在左侧和右侧添加一条线,偏移量为 250m。

我试过:

SELECT ST_AsText(ST_OffsetCurve(geom,
    -250, 'quad_segs=4 join=round')) As notsocurvy
    FROM ST_GeomFromText(
'linestring(13.40044325726135 52.51884104088853 , 13.40109986093854 52.51827594967714)') As geom;

SELECT ST_AsText(ST_OffsetCurve(geom,
    -250, 'quad_segs=4 join=round')) As notsocurvy
    FROM ST_GeomFromText(
'LineString(13.40109986093854 52.51827594967714 , 13.39917356833286 52.51769543984515)') As geom;

SELECT ST_AsText(ST_OffsetCurve(geom,
    -250, 'quad_segs=4 join=round')) As notsocurvy
    FROM ST_GeomFromText(
'linestring(13.39917356833286 52.51769543984515 , 13.37837611723877 52.5162977964313)') As geom;

返回 某事 成功。但由于我是 SQL 的新手,我不太明白如何从这里继续前进。

任何帮助将不胜感激!

因此 ST_OffsetCurve 输出从现有几何导出的新几何。

您首先使用列名计算曲线偏移,而该列来自手动创建的几何图形:

SELECT ST_AsText(ST_OffsetCurve(geom,
    -250, 'quad_segs=4 join=round')) As notsocurvy
FROM ST_GeomFromText(
'linestring(13.39917356833286 52.51769543984515 , 13.37837611723877 52.5162977964313)') As geom;

如果你想从你的table推导出曲线,你可以在这里引用它:

SELECT ST_AsText(ST_OffsetCurve(geom,
    -250, 'quad_segs=4 join=round')) As notsocurvy
FROM paradezug ;

从那里,一种选择是将曲线偏移添加到相同的 table。 id 应由一个序列填充(搜索 serialidentity),因此您可以在 insert 语句中简单地省略它。此外,您不需要插入文本而是几何图形,所以让我们删除 st_asText 函数:

INSERT INTO paradezug (geom)
SELECT ST_OffsetCurve(geom,
        -250, 'quad_segs=4 join=round') As geom
FROM paradezug ;

现在您可能想要跟踪哪条线是中心线,并确保在 运行 此查询之前不存在偏移线。