Shapely / Geopandasを使用して2本の線を互いにスナップしようとしていますが、スナップの結果は非常に奇妙です。私は試した :
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のコメントを回答に変換する必要があります。
—
-nmtoken
この問題を再現するためにデータまたはその一部を共有できますか?
—
bugmenot123 16
Shapely 1.6ユーザーマニュアルを提供:「shapely.opsのsnap()関数は、1つのジオメトリの頂点を、指定された許容値で2番目のジオメトリの頂点にスナップします。」私が理解しているように、お互いに近いジオメトリをスナップするのではなく、頂点をお互いにスナップします。そのため、ジオメトリが他のジオメトリに近い場合、頂点をしきい値内にスナップします。
—
カディールŞahbaz18年