Shapely / Geopandas를 사용하여 두 줄을 서로 맞추려고하지만 스냅 결과가 매우 이상합니다. 나는 시도했다 :
import geopandas as gpd
from shapely.geometry import *
from shapely.ops import snap
lines1 = gpd.GeoDataFrame.from_file('lines1.shp')
lines1 = lines1.to_crs({'init': 'epsg:2227'})
lines2 = gpd.GeoDataFrame.from_file('lines2.shp')
lines2 = lines2.to_crs({'init': 'epsg:2227'})
res = lines1
lines2_union = lines2.geometry.unary_union
res.geometry = res.geometry.apply(lambda x: snap(x, lines2_union, 14))
res.to_file('result.shp', driver="ESRI Shapefile")
그리고이 결과를 얻었습니다 :
lines1 = 빨간 줄
lines2 = 검은 선
스냅 후 (공차로 14 포함) : 파란색 선은 스냅 결과입니다.
예상대로 작동하지 않는 또 다른 예 : (스냅하기 전에)
그리고 스냅 후 결과는 다음과 같습니다. 검은 색 선 (남쪽)에는 부품 만 스냅됩니다. 원래 선은 꽤 가깝고 14 피트 이내이지만
공차를 늘리면 다음과 같은 잘못된 출력이 발생합니다 (스냅 핑 공차로 20을 정의한 후 녹색 선이 결과 임).
스냅이 제대로 작동하지 않는 이유에 대한 아이디어가 있습니까? 이 문제를 해결하는 방법에 대한 제안 사항이 있습니까?
아마도 정밀도의 문제 일 것입니다 ( Shapely.Geometry 라이브러리의 symmetric_difference 및 교차 연산이 왜 일치하지 않는 이유 참조 )
—
gene
@gene 당신은 내가 생각하는 답변으로 의견을 변환해야합니다.
—
nmtoken
이 문제를 재현하기 위해 데이터 또는 데이터의 일부를 공유 할 수 있습니까?
—
bugmenot123
Shapely 1.6 사용 설명서 제공 : "shape.ops의 snap () 함수는 주어진 공차를 사용하여 한 형상의 정점을 두 번째 형상의 정점에 스냅합니다." 내가 이해하는 것처럼, 서로 가깝게 지오메트리를 스냅하지 않고 정점을 서로 가깝게 스냅합니다. 따라서 어떤 지오메트리가 다른 지오메트리에 가까우면 임계점 내에 정점이 스냅됩니다.
—
Kadir Şahbaz