使用PostGIS/PostgreSQL将曲线从线串偏移到多边形

使用PostGIS/PostgreSQL将曲线从线串偏移到多边形,postgresql,width,polygon,postgis,multilinestring,Postgresql,Width,Polygon,Postgis,Multilinestring,我在Windows7(x64)机器上的PostgreSQL 9.5数据库(PostGIS 2.2)中有street(linestring)和building(polygon)表,如下所示 我试图通过绘制街道周围的偏移曲线来计算街道的宽度。其思想是在街道周围绘制平行线(偏移曲线),然后使用ST_Distance()计算它们之间的距离(宽度)。使用下面的查询,我可以使用PostGIS函数ST_OffsetCurve()在街道两侧绘制平行线。两个表均使用EPSG:3044 SELECT f.gid

我在Windows7(x64)机器上的PostgreSQL 9.5数据库(PostGIS 2.2)中有street(linestring)和building(polygon)表,如下所示

我试图通过绘制街道周围的偏移曲线来计算街道的宽度。其思想是在街道周围绘制平行线(偏移曲线),然后使用
ST_Distance()
计算它们之间的距离(宽度)。使用下面的查询,我可以使用PostGIS函数
ST_OffsetCurve()
在街道两侧绘制平行线。两个表均使用EPSG:3044

SELECT 
f.gid,
ST_Union(
    ST_OffsetCurve(ST_LineMerge(f.geom), 6.0, 'quad_segs=4 join=round'),
    ST_OffsetCurve(ST_LineMerge(f.geom), -6.0, 'quad_segs=4 join=round')
    ) as track
FROM
street f;
上面的查询如下所示:


到目前为止,这些偏移曲线与街道的固定距离为6米。对于每一条街道,我想沿着建筑物正面(多边形的边缘面向街道)绘制这些偏移曲线。有人能帮我怎么做吗

你想用平行线法做这件事是有原因的吗?或者你想得到从中心线到两边建筑物最近点的距离呢?好吧,你的建议是+1!这只是一个想法。可能会有更好、更有效的方法来实现这一点(例如,您建议的方法)。作为一个新手,我最终用这种方法来计算宽度。然而,计算到街道两侧的距离也很好。也许使用两个最近点(道路两侧)之间的距离,基于从每条线的质心进行搜索。。。虽然可能需要一些实验。如果您指的是多边形上距离街道最近的点,那么它可以工作,但使用ST_ClosestPoint()可能无法在多边形上垂直投影最近的点。尽管这似乎是个好主意,但只是一个评论。你有什么理由想用平行线法来做这件事吗?或者让我们计算一下从中心线到两边建筑物最近点的距离如何?好吧,你的建议是+1!这只是一个想法。可能会有更好、更有效的方法来实现这一点(例如,您建议的方法)。作为一个新手,我最终用这种方法来计算宽度。然而,计算到街道两侧的距离也很好。也许使用两个最近点(道路两侧)之间的距离,基于从每条线的质心进行搜索。。。虽然可能需要一些实验。如果您指的是多边形上距离街道最近的点,那么它可以工作,但使用ST_ClosestPoint()可能无法在多边形上垂直投影最近的点。只是一个评论,虽然这似乎是个好主意。