我正尝试在Shapely中将一个点插值到LineString
上,然后相应地拆分该线。但是,由于精度误差,Shapely认为插值点不在linestring
上,因此split
操作无法实现。
这里是一个示例:
from shapely.ops import split
from shapely.geometry import LineString, Point
### Initialize point and line
line = LineString([(0.123,0.456),(5.678,7.890),(12.135,6.789)])
point = Point(4.785,8.382)
### Interpolate point onto line
new_point = line.interpolate(line.project(point))
print new_point
>> POINT (5.593949278213755 7.777518800043393)
### BUT: line does not intersect the interpolated point
line.intersects(new_point)
>> False
### EVEN THOUGH: distance between them is essentially (not exactly) zero
line.distance(new_point)
>> 0.0
### THEREFORE: line cannot be split using the new point
len(split(line, new_point))
>> 1
我认为问题如下:1. 我将原始的点/线坐标四舍五入,以避免超出计算机的精度限制。
2. 但是,插值点的精度非常高,我不知道如何控制它。
3. 理论上,我可以将此新点的坐标四舍五入,但这似乎也不能确保新点位于该直线上。
相关问题在这里,这里和这里。