微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python pyvista中读取dem文件

如何解决如何在python pyvista中读取dem文件

我有像这里的 .dem 文件http://ddfe.curtin.edu.au/models/ERTM2160/data/dem/

在 python pyvista 中,我有

import pyvista as pv
file = 'pick_one_from_the_link_above.dem'
mesh = pv.read(file)

输出说:

mesh.dimensions
[-2147483648,-2147483648,1]

除减号外,mesh.n_points 的平方根

尝试使用 mesh.points 绘制或提取点时,我收到一条消息,指出不允许使用负尺寸。尝试以下:

mesh.dimensions = [int(numpy.sqrt(mesh.n_points)),int(numpy.sqrt(mesh.n_points)),1]

导致错误消息:

溢出错误:SetDimensions 参数 1:值超出整数范围

谁能告诉我我做错了什么,我不知道?或者可能知道如何读取这些文件以制作曲面图?

非常感谢:)

解决方法

@larsks 在上面的评论中是正确的。这些“.dem”文件不是 PyVista 和它包装的 VTK 阅读器所期望的格式。您应该使用 np.fromfile 读取数据:arr = np.fromfile('N00E015.dem',dtype=np.int16)。离the docs listed at your link更远:

由于其总大小为 44 GB,该模型被分区并分布在 每个函数的 881 个 5 度 x 5 度大小的二进制文件的术语。每 5 度 x 5 度图块在单元格中心表示中包含 2500 x 2500 个网格点 (网格点不在整数子午线和纬线上)

您只需创建一个该大小的 pv.UniformGrid 并添加数据。例如:

import numpy as np
import pyvista as pv

arr = np.fromfile('N00E015.dem',dtype=np.int16)

grid = pv.UniformGrid()
grid.dimensions = (2500,2500,1)
grid.origin = (0,0) # you need to figure this out
grid['dem'] = arr

grid.plot()

enter image description here

为了获得网格的正确空间参考,您需要设置每个子集/网格的 origin 点。

此外,PyVista 社区在 PyVista 支持论坛上比 Stack Overflow 上更活跃:https://github.com/pyvista/pyvista-support

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?