Python中的地理插值

Python中的地理插值,python,kriging,spatial-interpolation,openturns,Python,Kriging,Spatial Interpolation,Openturns,我有500个点,经度x,纬度y,海拔z,以及这些点的值 另一方面,我还有其他200个点,而不是我想插值的,其中纬度、经度和高度是已知的 考虑到点的高度和 地理位置在这些点之间,我的地图是西班牙 例如: 我有2个点(x,y,z)和(x',y',z')。实际距离为黑线,多项式插值为蓝线(近似距离),这两个点之间的欧几里德距离为红线。我想获得蓝线或黑线的距离 以下以(x,y)为输入的示例适用: 但是我想把高度z作为一个输入参数来管理 Python中的一些库?有什么教程吗?我会试着用英语回答你的问题

我有500个点,经度x,纬度y,海拔z,以及这些点的值

另一方面,我还有其他200个点,而不是我想插值的,其中纬度、经度和高度是已知的

考虑到点的高度和 地理位置在这些点之间,我的地图是西班牙

例如:

我有2个点(x,y,z)和(x',y',z')。实际距离为黑线,多项式插值为蓝线(近似距离),这两个点之间的欧几里德距离为红线。我想获得蓝线或黑线的距离

以下以(x,y)为输入的示例适用:

但是我想把高度z作为一个输入参数来管理


Python中的一些库?有什么教程吗?

我会试着用英语回答你的问题

我们假设西班牙是一个1000×1000平方公里。 你的500个点在曲面上随机分布

将openturns导入为ot
将numpy作为np导入
#使用2个坐标启动一个尺寸为500的样本
inputdata=ot.样本(500,2)
#第1列为0到1000之间的随机数
inputdata[:,0]=ot.Uniform(01000).getSample(500)
#第二列为0到1000之间的随机数
inputdata[:,1]=ot.Uniform(01000).getSample(500)
然后,让我们为每个点指定一个高度。OpenTURNS允许定义符号函数:

height=ot.SymbolicFunction([“x”,“y”],[“10+10*(x+y)/1000+10*((x+y)/1000)*sin(3*x*pi/1000)*cos(5*y*pi/1000)”)
outputdata=高度(inputdata)
现在,我们要对数据进行插值,以估计地图上任何点的高度。克里格法允许这样做,但您最好了解有关问题的一些信息(总体趋势、两个远处点的高度之间的相关性)

#输入数据的维度
尺寸=2
basis=ot.ConstantBasisFactory(维度).build()
协方差模型=正交平方协方差(维数)
然后我们调用克里格算法来进行插值

algo=ot.KrigingAlgorithm(输入数据、输出数据、协方差模型、基础)
算法运行()
result=algo.getResult()
metamodel=result.getMetaModel()
metamodel
正是您想要的功能

#给出点的推断高度(x=123,y=967)
元模型([123967])
>>> [12.2225]
如果要绘制结果,可以在正方形的网格上计算预测值

gridx=np.arange(0.01001,10)
nx=len(gridx)
gridy=np.arange(0.01001,10)
ny=len(gridx)
十、 Y=np.meshgrid(gridx,gridy)
预测=np.array(zip(X.ravel(),Y.ravel())]中(xi,yi)的元模型([[xi,yi])))。重塑(nx,ny)
然后可以使用matplotlib查看结果:

将matplotlib.pylab作为plt导入
plt.图()
vmin=predictions.min()
vmax=predictions.max()
plt.pcolor(X,Y,预测,cmap='viridis',vmin=vmin,vmax=vmax)
plt.scatter([d[0]表示输入数据中的d],[d[1]表示输入数据中的d],c=[d表示输出数据中的d],s=2,edgecolor=“white”,cmap='viridis',vmin=vmin,vmax=vmax)
plt.colorbar()
plt.show()

也可以在三维视图中查看:-)

来自mpl_toolkits.mplot3d导入Axes3D
从matplotlib导入cm
图=plt.图()
ax=图gca(投影=3d')
surf=最大绘图曲面(X,Y,预测,cmap=cm.viridis,
线宽=0,抗锯齿=假)
图颜色条(表面,收缩=0.5,纵横比=5)
plt.show()

这太神奇了,但我试图找到更多的东西。在问题中添加细节。谢谢!!!一旦在整个地图上都有了元模型(即(x,y,z=f(x,y)),当你将(x,y,z)和(x+dx,y+dy,z+dz)之间的距离相加,计算从(x0,y0,z0)到(x1,y1,z1)的距离就变得很容易了?你的意思是“大地距离”,即在海平面上沿地球椭球体在一点和另一点之间的最短路径吗?在这种情况下,你如何考虑距离方程中的高度?@MichaelBaudin我试图更好地解释。我在山谷中有2个点(V型)。一个在山上()另一个在这个(/)前面。具有相同高度和相同y坐标的两个点。x距离是100p1=(100,50800)p3=(0,50800)距离=100。我想要更多的东西。现在我有一个点p2(在中间)。其高度为0 p2=(50,50,0)。然后我走了p1到p3的距离,但考虑到每1公里的中间点(例如)。因为考虑到p2,p1和p3之间的距离为距离=平方米((100-50)²+800²)+平方米((50-0)²+(0-800)²)