library(sp)
library(raster)
p95 <- read.asciigrid("~/Pobrane/p95.asc", as.image=FALSE, plot.image=TRUE)
obs <- read.asciigrid("~/Pobrane/obs.asc", as.image=FALSE, plot.image=TRUE)
wynik <- raster(p95) - raster(obs)
plot(wynik, main="anomalie #1", col=terrain.colors(255))

wynik[wynik<0] <- 0 # pozbywamy sie anomalii <0
plot(wynik, main="anomalie - tylko dodatnie", col=terrain.colors(255)) #

# wczytanie szejpa z granicami administracyjnymi
# akurat w zasiegu mialem tylko taki dziwny z mapa Europy i "z dziura" dla PL
pl <- maptools::readShapeSpatial("/home/bartosz/R/skryptydoR/gis/dziurapl.shp") ;
## Warning: use rgdal::readOGR or sf::st_read
## Warning: use rgdal::readOGR or sf::st_read
calosc <- mask(wynik, pl,inverse=T) # maskujemy wyniki tylko do granic administracyjnych PL
# ten proces moze chwile zajec bez zrownoleglania...
# i dostajemy takie cos:
plot(calosc, col=terrain.colors(255))

calosc[] <- round(calosc[]) # mozemy takze zaokraglic wyniki dla ladniejszego efektu
plot(calosc, col=terrain.colors(255))

#####################################
#####################################
### jesli brac pod uwage rzeczywista powierzchnie gridow:
# 1. oblicz rozmiar wszystkich gridow z rastra [km2]
cell_size<-area(calosc, na.rm=TRUE, weights=FALSE)
## Warning in couldBeLonLat(out): CRS is NA. Assuming it is longitude/latitude
plot(cell_size, main="Powierzchnia grida w km^2")

raster_area <- sum(cell_size[], na.rm=T)
print(paste("obszar PL z rastra:",round(raster_area, digits=1),"km^2"))
## [1] "obszar PL z rastra: 310189.5 km^2"
# obliczenie anomalii 0-1
anomalie01 <- calosc
anomalie01[anomalie01 >0] <- 1
anomalie_w_km2 <- anomalie01*cell_size
sum(anomalie_w_km2[], na.rm=T) # powierzchnia z anomaliami dodatnimi
## [1] 282700
sum(anomalie_w_km2[], na.rm=T)/raster_area # udzial powierzchni z anomaliami dodatnimi
## [1] 0.9113782
# stara czesc ze statystykami...
# pobierzmy z rastra wartosci do wektora
a <- getValues(calosc)
summary(a)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.0 2.0 4.0 3.7 5.0 7.0 550285
length(which(is.na(a))) # tyle gridow jest poza PL (tylko w ramach radociekawostki)
## [1] 550285
grids_pl <- length(a)-length(which(is.na(a))) # tyle gridow jest ogolnie w PL
grids_pos <- length(which(a>0)) # a tyle gridow ma dodatnie anomalie
grids_pos/grids_pl * 100 # ile obszaru (%) ma dodatnie anomalie
## [1] 91.53704
# a jesli chcesz dokladniejsze staty to masz tabelke
data.frame(klasy_anomalii=paste0("<=",names(table(a)/grids_pl)),
udzial_procentowy=paste0( round(table(a)/grids_pl,3) *100,"%")
)
## klasy_anomalii udzial_procentowy
## 1 <=0 8.5%
## 2 <=1 6.7%
## 3 <=2 11.2%
## 4 <=3 12%
## 5 <=4 20.3%
## 6 <=5 20.9%
## 7 <=6 19.5%
## 8 <=7 1%