Точность с плавающей точкой с растерио - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь преобразовать данные xyz в растровую сетку, используя растерио

Я загрузил данные высот в массив numpy, точность значений z составляет 2 десятичных знака, а массив имеет тип dtype float64.

после загрузки данных xyz и помещения данных высот в сетку массив zi имеет следующие свойства и пример значения в массиве:

[in]  zi.shape 
[out] (3796, 3557)

[in]  zi.dtype
[out] dtype('float64')

[in]  zi[1000,1000]
[out] -5.27

Я пытаюсь записать в сеткуданные в файл ESRI Ascii с использованием rasterio и драйвера AAIGrid.

import rasterio
from rasterio.transform import from_origin
from fiona.crs import from_epsg

transform = from_origin(xmin, ymax, 0.5, 0.5)

new_dataset = rasterio.open('test1.asc', 'w', driver='AAIGrid',
                        height = zi.shape[0], width = zi.shape[1],
                        count=1, dtype=str(zi.dtype)
                        crs=from_epsg(32750),
                        transform=transform,
                        nodata = -9999)

new_dataset.write(zi, 1)
new_dataset.close()

Сетка z успешно записана в файл ESRI Ascii, только «точность» значений теперь составляет 19 десятичных знаков.Это делает файлы излишне большими и замедляет программы, использующие файлы в сетке.

Заголовочный файл ESRI Ascii и первые 2 значения:

ncols        3557
nrows        3796
xllcorner    765005.500000000000
yllcorner    9430016.000000000000
cellsize     0.500000000000
NODATA_value -9999
-0.029999999329447746277 -0.029999999329447746277

Я попытался изменить тип данных на float32 и добавиларгумент "точность = 2" для rasterio.open.Это способ, которым я могу уменьшить количество десятичных дробей?

...