Извличане на стойности от вътрешни полигони растер r

Опитвам се да намеря средната дневна температура за окръзи в Южна Дакота от растерни мрежи („bil“ файлове), намерени на http://prism.oregonstate.edu/. Получавам границите на окръга от пакета „карти“.

library(maps)
library(raster)
sd_counties <- map('county','south dakota')
sd_raster <- raster('file_path')

Как да извлека клетките на мрежата във всеки окръг? Мисля, че трябва да превърна всеки окръг в свой собствен полигон, за да направя това, но как? След това трябва да мога да направя нещо като следното. Всяка помощ ще бъде високо оценена.

values <- extract(raster, list of polygons)  
polygon_means <- unlist(lapply(values, FUN=mean))

person user8229029    schedule 07.02.2019    source източник


Отговори (1)


Не съм запознат с пакета maps или функцията map, но изглежда, че е само за визуализация, а не за геопространствени операции.

Въпреки че може да има начин да преобразувате map обекта в действителни многоъгълници, ето един лесен начин да изпеете getData функцията на raster, която работи:

library(raster)

usa_adm2 <- getData(country='USA',level=2)

sd_counties <- usa_adm2[grepl('South Dakota',usa_adm2$NAME_1),]

plot(sd_counties)

въведете описание на изображението тук

Сега можете да извличате пиксели за всеки окръг, като използвате extract(r,sd_counties), където r е желаният от вас растер.

Имайте предвид, че в зависимост от броя на пикселите (и слоевете), които трябва да извлечете, това може да отнеме известно време.

person Val    schedule 07.02.2019
comment
Знаете ли дали това е най-бързият метод? Това ще отнеме много време, ако е така. - person user8229029; 08.02.2019
comment
Разгледайте пакета velox. Нямам личен опит с него, но изглежда обещаващо. Друг вариант е да растеризирате полигоните си и да извлечете стойностите си с индексиране. - person Val; 08.02.2019
comment
Пакетът velox ускорява екстракцията вероятно около 5 пъти, много хубаво! - person user8229029; 09.02.2019