Расстояние между линиями Geopandas

У меня есть набор данных шейп-файла. Некоторые дороги (линии) имеют одинаковое название, но расположены в разных местах и ​​не связаны между собой.

Вот изображение дорог с таким же названием в моем файле данных геопанды:

введите здесь описание изображения

Я хотел бы иметь возможность измерять расстояние между фрагментами дорог (строками), чтобы иметь возможность переименовывать дороги, если расстояние выше порогового значения, чтобы каждая дорога имела свое собственное уникальное имя.

Следовательно, знаете ли вы, как найти расстояние между линиями?


person james    schedule 25.12.2017    source источник


Ответы (1)


В геопандах геометрия представляет собой объекты формы. Чтобы получить расстояние между любыми двумя фигурными объектами, вы используете метод с умным названием 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)

Возвращает все нули, потому что он выстраивается в ряд от gs до gs по индексу, что является одной и той же геометрией.

Но:

gs.distance(gs.shift())

Дает вам расстояния от линии 1 до линии 2 и от линии 2 до строки 3:

0         NaN
1    0.554700
2    0.948683
dtype: float64
person Paul H    schedule 25.12.2017
comment
Ух ты! Большое спасибо !! Это отличный ответ. - person james; 26.12.2017