получить ошибку "Значение истинности массива с более чем одним элементом неоднозначно"? - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь построить растровое изображение, используя Rasterio, Matplotlib и Numpy.Хотя то, что я делаю, вероятно, не имеет никакого отношения к реальному коду и ошибкам Python.

Вот код:

import rasterio
import matplotlib.pyplot as plt
import numpy as np

band5 = rasterio.open(r"C:\Users\new\Desktop\LC08_L1TP_015033_20170822_20170912_01_T1_B5.TIF")

band4 = rasterio.open(r"LC08_L1TP_015033_20170822_20170912_01_T1_B4.TIF")

#rasterio.windows.Window(col_off, row_off, width, height)
window = rasterio.windows.Window(1024, 1024, 1280, 2560)

with rasterio.open(band5) as src:
    subset = src.read(1, window=window)

plt.figure(figsize=(6,8.5))
plt.imshow(subset)
plt.colorbar(shrink=0.5)
plt.title(f'Band 5 Subset\n{window}')
plt.xlabel('Column #')
plt.ylabel('Row #')

Полное сообщение об ошибке с отслеживанием:

runfile('C:/Users/new/Desktop/RasterSubsetNDVI.py', wdir='C:/Users/new/Desktop')
Traceback (most recent call last):

  File "<ipython-input-131-5d04fa0ce75f>", line 1, in <module>
    runfile('C:/Users/new/Desktop/RasterSubsetNDVI.py', wdir='C:/Users/new/Desktop')

  File "C:\Users\new\Miniconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
    execfile(filename, namespace)

  File "C:\Users\new\Miniconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/new/Desktop/RasterSubsetNDVI.py", line 12, in <module>
    with rasterio.open(band5) as src:

  File "C:\Users\new\Miniconda3\lib\contextlib.py", line 81, in __enter__
    return next(self.gen)

  File "C:\Users\new\Miniconda3\lib\site-packages\rasterio\__init__.py", line 177, in fp_reader
    memfile = MemoryFile(fp.read())

  File "C:\Users\new\Miniconda3\lib\site-packages\rasterio\io.py", line 105, in __init__
    file_or_bytes=file_or_bytes, filename=filename, ext=ext)

  File "rasterio/_io.pyx", line 745, in rasterio._io.MemoryFileBase.__init__

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я использую код, найденный здесь, и пытаюсь воспроизвести его на моем компьютере смои собственные файлы TIF.Где написано «Потяните подмножество изображений в полном разрешении».ССЫЛКА: https://github.com/geohackweek/tutorial_contents/blob/ba5e9443137a9aca87cdcdcd70e9e6a237cc64ba/raster/notebooks/rasterio-landsat-aws.ipynb

Я работаю на IDE Sypder и использую Python 3.6

Пожалуйста, любая помощь приветствуется.

Спасибо

1 Ответ

0 голосов
/ 18 ноября 2018

Внимательно посмотрите на следующие строки вашего кода (другие опущены):

band5 = rasterio.open(r"C:\Users\new\Desktop\LC08_L1TP_015033_20170822_20170912_01_T1_B5.TIF")

# ...

with rasterio.open(band5) as src:
    # ...

Из документации Растерио :

Растерио rasterio.open() берет путь и возвращает объект набора данных.

Во второй строке выше вы передаете набор данных в rasterio.open() вместо пути. Возможно, вы хотели пройти тот же путь, который использовали для создания band5 из?

Было бы неплохо, если бы rasterio.open() проверил тип аргумента, который вы ему дали, и дал вам исключение, которое говорит, что «путь к файлу не является строкой» или тому подобное, но, к сожалению, похоже, что это не так.

...