У меня были проблемы с отсутствием значений данных в пакете Python Rasterio при применении многоугольной маски на растровом наборе данных. Этот конкретный раст - Landsat Uint8 с 7 полосами, а значение NO данных не указано по своей природе, потому что 255 - зарезервированное значение для данных NO. Однако иногда данные UINT8 сжаты из данных UINT16, а значение 255 - это допустимое значение данных, которое я не хочу рассматривать как «нет данных» (данные - это диапазон полного бита). По умолчанию функцию маски Rasterio состоит в том, чтобы рассматривать 0 как значение «без данных», если этот аргумент не указан, что проблематично одинаково, поскольку 0 иногда считается действительным значением данных. Есть ли способ переопределить значение метаданных для «Нет данных»? < /p>
[*] Преобразование данных UINT8 в данные UINT16 с использованием rasterio.open () и назначение '256' в качестве значения данных, как это будет выходить за рамки любых данных Uint8, но принято в диапазоне данных Uint16. Вот как определенные программные программы, такие как ArcMap, иногда будут иметь дело с назначением никаких значений данных. Полученная ошибка: «Данное значение Nodata, NAN, выходит за рамки достоверного диапазона типа данных». Несмотря на то, что в документации NAN указан в качестве действительной записи для аргумента «Nodata».
во время процесса маски с использованием rasterio.mask (), указанный nodata = nan. Полученная ошибка "не может конвертировать fill_value nan в dtype". < /p> < /li>
< /ol>
import rasterio
import fiona
import numpy as np
fp_src = ''
fp_dst = ''
shape = ''
# get shapes
with fiona.open(shape, 'r') as shapefile:
geoms = [feature['geometry'] for feature in shapefile]
# Method Number 1
# ~~~~~~~~~~~~~~~~~~~~~~~~~
# open original raster, copy meta & alter dtype
with rasterio.open(fp_src) as src_dataset:
kwds = src_dataset.profile
kwds['dtype'] = 'uint16'
src_meta = src_dataset.meta
# write a new raster with the copied and altered meta
with rasterio.open(fp_dst, 'w', **kwds) as dst_dataset:
dst_meta = dst_dataset.meta
src_dataset.close()
dst_dataset.close()
img = rasterio.open(fp_dst)
# mask img and set nodata to 256 (out of the uint8 range)
out_image, out_transform = mask(img, geoms, nodata=256)
# out_image output: values outside of the geoms are 256 & values inside are 0.
# Method Number 2
# ~~~~~~~~~~~~~~~~~~~~~~~~~
# open original raster, copy meta & alter dtype
with rasterio.open(fp_src) as src_dataset:
kwds = src_dataset.profile
kwds['nodata'] = np.nan
kwds['dtype'] = 'uint16'
src_meta = src_dataset.meta
# write a new raster with the copied and altered meta
with rasterio.open(fp_dst, 'w', **kwds) as dst_dataset:
dst_meta = dst_dataset.meta
src_dataset.close()
dst_dataset.close()
img = rasterio.open(fp_dst)
# mask img and let the mask function default to the image's newly created nodata (np.nan from inside with rastario.open...)
out_image, out_transform = mask(img, geoms)
# out_image output: nodata value, nan, is beyond the valid range of its data type
# Method Number 3
# ~~~~~~~~~~~~~~~~~~~~~~~~~
# mask img and set nodata to nan
out_image, out_transform = mask(fp_src, geoms, nodata=np.nan)
# out_image output: Cannot convert fill_value nan to dtype.
< /code>
Я надеюсь увидеть все пиксели вне данного многоугольника, преобразованного в запись «без данных», которая не обязательно является частью достоверного диапазона, так что нет возможности случайного восприятия сценария, как нет данных. < /p>
Подробнее здесь: https://stackoverflow.com/questions/572 ... g-rasterio
Как изменить dtype растрового с помощью Rasterio ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
ValueError: запрошено преобразование тензора dtype float64 для тензора с dtype float32
Anonymous » » в форуме Python - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-