Как изменить dtype растрового с помощью RasterioPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как изменить dtype растрового с помощью Rasterio

Сообщение Anonymous »

У меня были проблемы с отсутствием значений данных в пакете 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»