我试图根据点地面测量创建河流横截面剖面。当尝试LineString
从具有公共 ID 的一系列点创建 Shapely 时,我意识到给定点的顺序确实很重要,因为它LineString
只会“按索引”连接给定点(以列表给定的顺序连接点)。下面的代码说明了默认行为:
from shapely.geometry import Point, LineString
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
# Generate random points
x=np.random.randint(0,100,10)
y=np.random.randint(0,50,10)
data = zip(x,y)
# Create Point and default LineString GeoSeries
gdf_point = gpd.GeoSeries([Point(j,k) for j,k in data])
gdf_line = gpd.GeoSeries(LineString(zip(x,y)))
# plot the points and "default" LineString
ax = gdf_line.plot(color='red')
gdf_point.plot(marker='*', color='green', markersize=5,ax=ax)
这将产生图像:
问题: Shapely 中是否有任何内置方法可以通过给定的随机 2D 点列表自动创建最合乎逻辑的(又名:最短、最简单、最不交叉……)线?
与默认(红色)相比,您可以在下面找到所需的线(绿色)。