Я намагаюся прив’язати дві лінії один до одного за допомогою 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")
І отримали такий результат:
лінії1 = червоні лінії
lines2 = чорні лінії
Після оснащення (з допуском 14): сині лінії є результатом оснащення
У цьому випадку лінії правильно прориваються
Ще один приклад, коли він не працював так, як очікувалося: (до оснащення)
І ось результат після оснащення. Лише частина прив’язана до чорної лінії (південна сторона). Хоча оригінальні лінії досить близькі і в межах 14 футів
Якщо я збільшую толерантність, я отримую неправильний вихід, приблизно так (після визначення 20 як допуску оснащення, в результаті з'являється зелена лінія):
Будь-які ідеї щодо того, чому оснащення не працює належним чином? Будь-які пропозиції щодо вирішення цієї проблеми?