如何在python pyvista中读取dem文件
我有如下.dem文件: 在python pyvista中,我有:如何在python pyvista中读取dem文件,python,pyvista,Python,Pyvista,我有如下.dem文件: 在python pyvista中,我有: import pyvista as pv file = 'pick_one_from_the_link_above.dem' mesh = pv.read(file) 结果显示: mesh.dimensions [-2147483648,-2147483648,1] 除了减号,它是网格n_点的平方根 尝试使用mesh.points绘制或提取点时,我收到一条消息,不允许使用负尺寸。尝试以下方法: mesh.dimensions
import pyvista as pv
file = 'pick_one_from_the_link_above.dem'
mesh = pv.read(file)
结果显示:
mesh.dimensions
[-2147483648,-2147483648,1]
除了减号,它是网格n_点的平方根
尝试使用mesh.points绘制或提取点时,我收到一条消息,不允许使用负尺寸。尝试以下方法:
mesh.dimensions = [int(numpy.sqrt(mesh.n_points)),int(numpy.sqrt(mesh.n_points)),1]
结果显示错误消息:
OverflowerError:SetDimensions参数1:值超出int的范围
谁能告诉我我做错了什么,我不知道?或者你知道如何读取这些文件来绘制曲面图吗
非常感谢:)@larsks在上面的评论中是正确的。这些“.dem”文件的格式不是PyVista及其包装的VTK读取器所期望的格式。您应该使用
np.fromfile
读取数据:arr=np.fromfile('N00E015.dem',dtype=np.int16)
。除此之外:
由于该模型的总大小为44 GB,因此它被分区并分布在
每个函数的881个5度x 5度大小的二进制文件的术语。每5度
x 5度平铺在单元表示的中心包含2500 x 2500个网格点
(栅格点不位于整数子午线和平行线上)
您只需创建一个该大小的pv.UniformGrid
,并添加数据。例如:
将numpy导入为np
将pyvista导入为pv
arr=np.fromfile('N00E015.dem',dtype=np.int16)
grid=pv.UniformGrid()
网格尺寸=(2500、2500、1)
grid.origin=(0,0,0)#您需要解决这个问题
栅格['dem']=arr
grid.plot()
为了获得栅格的正确空间参考,需要设置每个子集/栅格的原点
此外,PyVista社区在PyVista支持论坛上比在堆栈溢出上更活跃:@larsks在上面的评论中是正确的。这些“.dem”文件的格式不是PyVista及其包装的VTK读取器所期望的格式。您应该使用np.fromfile
读取数据:arr=np.fromfile('N00E015.dem',dtype=np.int16)
。除此之外:
由于该模型的总大小为44 GB,因此它被分区并分布在
每个函数的881个5度x 5度大小的二进制文件的术语。每5度
x 5度平铺在单元表示的中心包含2500 x 2500个网格点
(栅格点不位于整数子午线和平行线上)
您只需创建一个该大小的pv.UniformGrid
,并添加数据。例如:
将numpy导入为np
将pyvista导入为pv
arr=np.fromfile('N00E015.dem',dtype=np.int16)
grid=pv.UniformGrid()
网格尺寸=(2500、2500、1)
grid.origin=(0,0,0)#您需要解决这个问题
栅格['dem']=arr
grid.plot()
为了获得栅格的正确空间参考,需要设置每个子集/栅格的原点
此外,PyVista社区在PyVista支持论坛上比在堆栈溢出上更为活跃:根据,您正在阅读的文件只是一个有符号的16位整数的集合,采用big-endian格式。据我所知,pyvista
中使用vtk.vtkDEMReader
的dem
读取器是预期的。根据,您正在读取的文件只是一个有符号的16位整数的集合,采用big-endian格式。据我所知,pyvista
中使用vtk.vtkDEMReader
的dem
读取器正在使用。未识别出这不是常规的dem文件。感谢alot提供的所有信息和简短的演示代码,它帮助了alot:)没有意识到这不是常规的dem文件。非常感谢您提供的所有信息和简短的演示代码,它帮助了很多:)