查找GADM数据中给定坐标的区域(区、州等)(in R)



我们正在使用法国的GADM数据,我很好奇我们是否可以根据纬度和经度找到一个点的区域。

我可以用

绘制法国地图
library(raster)
fr = getData("GADM", country="FRA", level=1)
plot(fr)

巴黎某点的坐标为

latitude = 48.86122650866868
longitude = 2.341541835915652

当我在第1层查找不同区域时,我得到

> fr$NAME_1
[1] "Auvergne-Rhône-Alpes"       "Bourgogne-Franche-Comté"    "Bretagne"                   "Centre-Val de Loire"       
[5] "Corse"                      "Grand Est"                  "Hauts-de-France"            "Île-de-France"             
[9] "Normandie"                  "Nouvelle-Aquitaine"         "Occitanie"                  "Pays de la Loire"          
[13] "Provence-Alpes-Côte d'Azur"

是否可以提取该坐标的区域,该坐标应该是Île-de-France?

with package {sf}:

library(sf)
my_point <- st_point(c(2.3415, 48.86122))
## convert fr to class sf
fr <- st_as_sf(fr)
i <- st_within(my_point, fr)
fr[as.integer(i),]$NAME_1

输出:

[1] "Île-de-France"

编辑查看,用标签标注点和省份:


library(ggplot2)
## set coordinate reference system for my_point
## to EPSG 4326 (WGS84):
my_point <- st_sfc(my_point, crs = 4326)
fr %>%
ggplot(mapping = aes(geometry = geometry)) +
geom_sf() +
geom_sf_label(aes(label = NAME_1)) +
geom_sf(my_point, mapping = aes(geometry = geometry))

使用geodata::gadm比较好。然后你会用"terra";而不是"光栅"和做的事:

library(terra)
library(geodata)
fr = gadm("France", level=1)
latitude = 48.86122650866868
longitude = 2.341541835915652
v <- vect(cbind(longitude, latitude))
extract( fr[,"NAME_1"], v)
extract( fr[,"NAME_1"], v)
#  id.y        NAME_1
#1    1 Île-de-France

相关内容

最新更新