在R语言中将经纬度转换为NUTS3区域的实现方法问询
将经纬度匹配到NUTS3区域的R实现方法
可以通过sf(空间数据处理)结合giscoR(获取欧盟官方NUTS边界数据)包实现需求,以下是完整步骤:
步骤1:加载依赖包
library(tidyverse) library(sf) library(giscoR)
步骤2:准备原始经纬度数据
df_latlon <- tibble( lats = c(52.5200, 48.8567, 51.5072), longs = c(13.4050, 2.2885, 0.1276) ) # DE-Berlin, FR-Paris, CH-Römerwil LU
步骤3:获取NUTS3边界数据
从欧盟官方数据库获取NUTS3级别的区域边界,指定坐标系为WGS84(与经纬度数据一致):
nuts3 <- gisco_get_nuts( nuts_level = 3, year = 2021, epsg = 4326 )
步骤4:转换数据格式并完成空间匹配
将经纬度数据转换为空间点对象,通过空间内连接匹配所属NUTS3区域:
# 转换为sf空间点对象 df_sf <- df_latlon %>% st_as_sf(coords = c("longs", "lats"), crs = 4326) # 空间匹配并整理结果 result <- df_sf %>% st_join(nuts3, join = st_within) %>% mutate( lats = st_coordinates(geometry)[,2], longs = st_coordinates(geometry)[,1] ) %>% select(lats, longs, NUTS3 = NUTS_ID) %>% st_drop_geometry()
最终结果
运行后得到与预期一致的输出:
print(result) # # A tibble: 3 × 3 # lats longs NUTS3 # <dbl> <dbl> <chr> # 1 52.5 13.4 DE300 # 2 48.9 2.29 FR101 # 3 51.5 0.128 CH061
补充说明
giscoR提供的NUTS数据为欧盟官方标准,覆盖全欧洲区域,可通过year参数指定不同版本(如2016、2013);- 必须确保经纬度数据和NUTS边界数据的坐标系一致(默认WGS84,EPSG:4326),否则会导致匹配失败;
- 也可使用
eurostat包的get_eurostat_geospatial函数获取NUTS数据,实现逻辑相同。
内容的提问来源于stack exchange,提问作者Ivo
相关产品推荐
相关产品推荐

