地理参考png到R中的shapefile

georeference png to a shapefile in R

GIS 新手,如果这是基础知识,请见谅。我有一张 png 无线电信号强度图:

我想提取中国县级平均信号强度数据。

我可以加载中国县的 shapefile 并可以创建信号强度的光栅文件,但我不知道如何 link 这两者以便我可以获得每个县的信号强度。我必须对数千个 png 执行此操作。谢谢!

library(raster)
ChinaRD3<-getData('GADM',country="CHN",level=3) #county level
library(rgeos)
ChinaRD3<-gSimplify(ChinaRD3,tol=0.01, topologyPreserve=TRUE)

raster = raster(paste(datadir,"screenshot2.png",sep="")) # the png in my post
v <- extract(raster, ChinaRD3)

# simplify to display mean values
output = unlist(lapply(v, function(x) if (!is.null(x)) mean(x, na.rm=TRUE) else NA ))

这就是图像地理配准的方法

library(terra)
r <- rast("https://i.stack.imgur.com/auWQt.png")
# you can drop the alpha channel 
r <- r[[1:3]]
# declare the R,G,B channels
RGB(r) <- 1:3

# remove the areas around the earth
# this could be made more precise, I am sure
x <- crop(r, c(0.00683, 0.872, 0.041, 0.984))

# set the extent
ext(x) <- c(-180,180,-90,90)

# show that it works
library(geodata)
chn1 <- geodata::gadm(country="CHN", level=1, path=".")

plot(z)
lines(chn1)

困难的部分来了。您需要将颜色转换为值。如果只有带或不带阴影的图例以及国家边界、网格线和海岸线,那就不会那么难了。但是如果你放大,你会看到边界是模糊的(也许这些是他们生命早期的 jpeg?),创造了很多颜色。使用 terra,您可以将颜色减少到 <= 255,然后可能 select 主色。但是可能有更好的工具(图像魔术?)来首先修复图像,使其只有您关心的颜色。

z <- colorize(x, "col")
f <- freq(z)[,-1]
f <- f[rev(order(f[,2])), ]
head(f)