如何用R的terra与geodata包将经纬度匹配到国家或美国州?
经纬度坐标匹配到国家/美国州的实现方案
已安装terra和geodata包,加载地图数据的代码如下:
library(geodata) usa <- gadm(country="USA", level=1, path=tempdir()) wld <- world(path=tempdir())
通过plot(usa)和plot(wld)可确认已获取美国州级地图数据及全球地图数据。
匹配经纬度到区域的方法
使用terra::extract函数可实现经纬度点的归属区域查询,示例代码及结果如下:
mypoints <- rbind(c(lon=-100,lat=34), c(-118,34),c(-90,40), c(-80,40),c(-73.961,40.786)) terra::extract(usa,mypoints)
输出结果:
id.y GID_1 GID_0 COUNTRY NAME_1 VARNAME_1 NL_NAME_1 TYPE_1 ENGTYPE_1 CC_1 HASC_1 ISO_1 1 1 USA.44_1 USA United States Texas TX|Tex. <NA> State State <NA> US.TX US-TX 2 2 USA.5_1 USA United States California CA|Calif. <NA> State State <NA> US.CA US-CA 3 3 USA.14_1 USA United States Illinois IL|Ill. <NA> State State <NA> US.IL US-IL 4 4 USA.39_1 USA United States Pennsylvania Commonwealth of Pennsylvania|PA <NA> State State <NA> US.PA US-PA 5 5 USA.33_1 USA United States New York NY|N.Y. <NA> State State <NA> US.NY US-NY
提取目标字段(如州名)
如果只需要州名,可直接提取NAME_1字段:
terra::extract(usa, mypoints)$NAME_1
输出结果:
[1] "Texas" "California" "Illinois" "Pennsylvania" "New York"
注意事项
terra::extract函数对位置敏感,例如位于哈德逊河中的点不会匹配到纽约州,会返回NA。
内容的提问来源于stack exchange,提问作者ivo Welch
相关产品推荐
相关产品推荐

