2017-12-25 23 views
0

나는 shapefile 데이터 세트가 있습니다. 일부 도로 (선)는 같은 이름이지만 다른 장소에 위치하고 연결되지 않습니다.거리 Linestring Geopandas 사이

enter image description here

내가 이름을 바꿀 수있는 것은 도로 덩어리 (선 스트링) 사이의 거리를 측정 할 수 있도록하고 싶습니다 : 여기

내 geopandas에 같은 이름을 가진 도로의 사진 데이터 파일입니다 거리가 임계 값보다 높으면 도로가 각 도로마다 고유 한 이름을 갖도록합니다.

따라서 선 스트링 간의 거리를 찾는 f}을 알고 있습니까?

+0

'line1.distance (2 호선)' –

답변

3

geopandas에서 지오메트리는 매끈한 객체입니다. 당신이 geopandas의 GeoSeries이있는 경우

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 

이/GeoDataFrame, 당신은 그것에 대해 좀 더 똑똑 할 필요가 : 두 매끈한 물체 사이의 거리를 얻으려면, 당신은 영리라는 이름의 distance 방법을 사용합니다.

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

반환 모두 제로 때문에 모두 같은 형상 인 인덱스, 최대 gsgs에 일직선.

그러나 :

gs.distance(gs.shift()) 

당신에게 세 번째 줄에 2 호선을 1 호선에서 거리 및 2 호선을 제공합니다 :

0   NaN 
1 0.554700 
2 0.948683 
dtype: float64 
+0

와우! 고마워요 !! 이것은 훌륭한 대답입니다. – james