如何在Python中基于非规则XY坐标生成间距为10米的等间隔矢量点
如何将非规则XY点重采样为两两间距10米的等间隔点?
我手头有一组非规则间隔的XY矢量点(x和y都是一维数组,单位为米),现在想把这些点重采样成两两之间直线距离恰好为10米的等间隔点。
我之前试着只对X方向做规则重采样,代码如下:
import numpy as np from scipy import interpolate import matplotlib.pyplot as plt f_bot = interpolate.interp1d(x, y) xnew_bot = np.arange(np.min(x),np.max(x),10) # 10 m spaced ynew_bot = f_bot(xnew_bot) plt.plot(x, y, 'o', xnew_bot, ynew_bot,'-') plt.show()
但问题来了:用scipy.interpolate.interp1d对Y值插值后,新生成的点之间的实际直线距离根本不是10米。我试过两种验证方式:
- 用QGIS测量新生成点(橙色点)的间距;
- 运行下面的代码计算间距:
dist_total = np.hstack([0,np.cumsum(np.hypot(np.diff(xnew_bot),np.diff(ynew_bot)))]) diff_dist = np.diff(dist_total) # calculate distance difference between each points
结果很明显:虽然X方向相邻点的间距刚好是10米,但Y方向相邻点的间距是不规则的,导致两点间的实际直线距离还是非均匀的。
想请教各位,有没有合适的函数或者方法,能确保生成的XY点两两之间的直线距离都严格是10米?我只需要实现这个间距效果,目前还没找到可行的方案,麻烦大家帮忙支个招!
附上我的XY数据示例:
| x | y |
|---|---|
| -1091590.00 | 158697 |
| -1091580.00 | 158702 |
| -1091580.00 | 158708 |
| -1091570.00 | 158713 |
| -1091560.00 | 158719 |
| -1091550.00 | 158724 |
| ... | ... |
| -1079450.00 | 164674 |
| -1079440.00 | 164677 |
| -1079430.00 | 164680 |
| -1079420.00 | 164683 |
内容的提问来源于stack exchange,提问作者jb16006
相关产品推荐
相关产品推荐

