Linestring Geopandas之间的距离

问题描述 投票:1回答:1

我有一个shapefile数据集。一些道路(线路)具有相同的名称,但位于不同的地方并且没有连接。

这是我的geopandas数据文件中具有相同名称的道路的图片:

enter image description here

我希望能够测量道​​路块(线串)之间的距离,以便在距离高于阈值时能够重命名道路,使得每条道路具有其自己的唯一名称。

因此,你知道如何找到线串之间的距离吗?

python python-3.x geopandas multilinestring
1个回答
4
投票

在geopandas中,几何形状是形状对象。要获得任何两个形状对象之间的距离,可以使用巧妙命名的distance方法:

from shapely.geometry import Point, LineString
import geopandas

line1 = LineString([
    Point(0, 0),
    Point(0, 1),
    Point(1, 1),
    Point(1, 2),
    Point(3, 3),
    Point(5, 6),
])

line2 = LineString([
    Point(5, 3),
    Point(5, 5),
    Point(9, 5),
    Point(10, 7),
    Point(11, 8),
    Point(12, 12),
])

line3 = LineString([
    Point(9, 10),
    Point(10, 14),
    Point(11, 12),
    Point(12, 15),
])

print(line1.distance(line2))
> 0.5547001962252291

如果你有一个geopandas GeoSeries / GeoDataFrame,你需要更聪明一些。

gs = geopandas.GeoSeries([line1, line2, line3])
gs.distance(gs)

返回全零,因为它在索引上排列gsgs,这是几何相同的几何。

但:

gs.distance(gs.shift())

给出从第1行到第2行的距离,以及从第2行到第3行的距离:

0         NaN
1    0.554700
2    0.948683
dtype: float64
© www.soinside.com 2019 - 2024. All rights reserved.