【问题标题】:How to read dem files in python pyvista如何在 python pyvista 中读取 dem 文件
【发布时间】:2021-02-19 01:53:00
【问题描述】:

我有类似这里的 .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]

导致错误消息:

OverflowError: SetDimensions argument 1: value is out of range for int

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

非常感谢:)

【问题讨论】:

  • 根据the docs,您正在阅读的文件只是一个大端格式的有符号16位整数的集合。据我所知,pyvista 中使用vtk.vtkDEMReaderdem 阅读器期待this DEM file format

标签: python pyvista


【解决方案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, 0) # you need to figure this out
grid['dem'] = arr

grid.plot()

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

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

【讨论】:

  • 没有发现这不是常规的 dem 文件。非常感谢您提供的所有信息以及简短的演示代码,它帮助了很多:)
猜你喜欢
  • 2014-10-15
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2015-10-02
  • 2020-11-29
  • 1970-01-01
相关资源
最近更新 更多