Используя R, я пытаюсь извлечь данные из растрового слоя, используя полигональный слой. Полигоны намного меньше ячеек растра:
Теперь вызываю extract()
из raster
библиотеки:
a <- extract(raster, polygons, weights = TRUE, small = TRUE)
a
# ...
# [[1551]]
# value weight
# 209 0.03 # top left cell - more than 50% of the polygon area
Есть две проблемы: вес - это пропорция площади ячейки, покрытой многоугольником, и веса округляются до 1/100. В моем случае в выходных данных присутствует только верхняя левая ячейка (значение 209) - вес трех других ячеек был округлен до нуля, и они были исключены. Однако нижняя левая ячейка покрывает значительную часть многоугольника и тоже должна быть включена!
Мне нужно правильное средневзвешенное значение. Можно ли это как-то еще сделать с помощью extract()
? Или любым другим способом?
PS: примечание в сторону: я думаю, что веса в extract()
не очень хорошо спроектированы - вес должен быть пропорцией площади многоугольника, покрытой конкретной ячейкой, а не наоборот. Тогда будет легче вычислить взвешенное среднее для многоугольника (просто умножьте два числа в каждой строке и просуммируйте), и округление до 1/100 не будет большой проблемой.
Воспроизводимый пример - (скачать файлы - упрощенная версия, фактических данных намного больше):
require(raster)
rast <- raster("my.tif")
poly <- readOGR(".", "socc_buff_Rx")
a <- extract(rast, poly, weights = TRUE, small = TRUE)
a
По теме: Извлечь в R не удается для небольших многоугольников и растров
extract
, 4) увеличить разрешение растра за счет дальнейшего разбиения ячеек (ваша идея). Так что это зависит от того, какое решение на самом деле является самым простым, а также более эффективным с точки зрения вычислений. И я пока не знаю, как реализовать эти решения ... - person Tomas   schedule 21.07.2013extract
со ссылкой на эту страницу. Любой желающий может это сделать. - person Tomas   schedule 19.11.2013