Я работаю над вычислительной моделью обилия диких опылителей в ландшафте. Сама модель завершена, и сейчас я борюсь с этапом постобработки.
У меня есть мой растровый растр GDAL, который выглядит примерно так (более светлые цвета означают большее посещение опылителя на пиксель):
И у меня есть шейп-файл OGR точек, представляющих образцы мест на ландшафте:
Я пытаюсь провести некоторый анализ пикселей под этими точками, но для этого мне нужно иметь возможность извлечь значение пикселя под точкой.
Можно ли извлечь значение пикселя под точкой, используя только OGR и GDAL через Python? Я бы предпочел не читать весь растр в память ReadAsArray()
, так как мои выходные растры очень, очень большие (слишком большие, чтобы поместиться в память).
Я заметил этот пост , который похож, но требует вызова из командной строки.
Ответы:
Вы можете использовать метод gdal.Dataset или gdal.Band ReadRaster. См. Учебники по GDAL и OGR API и пример ниже. ReadRaster не использует / требует numpy, возвращаемое значение является необработанными двоичными данными и должно быть распаковано с использованием стандартного модуля структуры python .
Пример:
В качестве альтернативы, поскольку причина, по которой вы отказались от использования,
numpy
заключалась в том, чтобы не читать весь используемый массивReadAsArray()
, ниже приведен пример, в котором используетсяnumpy
и не читается весь растр.источник
px
/py
являются неправильными в случае, когда mx / my лежит за пределамиrb
, потому чтоint(-0.5) == 0
. Вам нужноfloor(...)
, а затем вам нужно проверить, что ни один изpx
/py
не меньше нуля (или сделать это перед вызовомint()
), потому что работают отрицательные индексы (они получают другую сторону массива). Я хотел бы знать, есть ли более аккуратный способ справиться с этой проблемой. Кроме того, как вы переписываете эти строки, чтобы они правильно обрабатывали повороты?