gpt4 book ai didi

python - 由于精度问题,形状无法在点上分割线

转载 作者:行者123 更新时间:2023-12-04 12:43:43 25 4
gpt4 key购买 nike

我试图将一个点插入到 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. 但是,INTERPOLATED 点的精度非常高。我不知道如何控制这个。
3. 理论上,我可以四舍五入这个新点的坐标,但这似乎也不能确保新点在直线上。

相关问题 hereherehere

最佳答案

我想出了一个有点hacky的解决方案。如果有人发布更好的,我会接受。

# After the code above: 

### Create a buffer polygon around the interpolated point
buff = new_point.buffer(0.0001)

### Split the line on the buffer
first_seg, buff_seg, last_seg = split(line,buff)

### Stitch together the first segment, the interpolated point, and the last segment
line = LineString(list(first_seg.coords) + list(new_point.coords) + list(last_seg.coords))

line.intersects(new_point)
>> True

关于python - 由于精度问题,形状无法在点上分割线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com