我试图使用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,您应该将评论转换为我认为的答案。
—
nmtoken
您可以共享数据或其中的一部分来重现此问题吗?
—
bugmenot123
提供的Shapely 1.6用户手册:“ shapely.ops中的snap()函数以给定的公差将一个几何图形中的顶点捕捉到第二个几何图形中的顶点。” 据我了解,它不会对齐彼此接近的几何,而是对齐其顶点彼此接近。因此,如果任何几何图形都与其他几何图形接近,它将在阈值内捕捉其顶点。
—
KadirŞahbaz18年