Как читать файлы dem в Python pyvista
у меня есть файлы .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]
который является, за исключением знака минус, квадратным корнем из сетки. n_points
Пытаясь построить или извлечь точки с помощью mesh.points, я получаю сообщение о том, что отрицательные размеры недопустимы. Пробуем следующее:
mesh.dimensions = [int(numpy.sqrt(mesh.n_points)),int(numpy.sqrt(mesh.n_points)),1]
приводит к сообщению об ошибке:
OverflowError: аргумент SetDimensions 1: значение вне допустимого диапазона для int
Может кто-нибудь сказать мне, что я делаю не так, я понятия не имею? Или, может быть, есть идея, как читать эти файлы для построения поверхностного графика?
Большое спасибо :)
1 ответ
@larsks верен в комментарии выше. Эти файлы «.dem» имеют не тот формат, который ожидают PyVista и программа для чтения VTK, которую они упаковывают. Вы должны использовать
np.fromfile
для чтения данных:
arr = np.fromfile('N00E015.dem', dtype=np.int16)
. Далее из документов, перечисленных по вашей ссылке :
Из-за своего общего размера 44 ГБ модель разбита на разделы и распределена в виде 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