如何在 R 中的 sf 包中查找区域级几何

How to find region-level geometry in sf package in R

我想使用 sfplotly 包绘制地理空间地图。但是,我没有国家级数据,只有地区级数据(亚洲、欧洲、拉丁美洲等)。这是我将要处理的数据集的模型,我正在寻找一种方法来查找经度、纬度和几何形状。我打算先把Excel里面的数据全部收集起来,然后再搬到R里面分析

我找了几个 packages/datasets,例如 rnaturalearthmaps::map 等,但找不到正确的 latitude/longitude/coordinates 或地区。我在哪里可以找到它们?提前致谢

这里你对你的问题有一些想法:

  1. 由于不确定您需要如何定义每个区域(国家的区域分类有多种可能性),也许您应该首先将世界上的每个国家映射到您认为它所属的区域。之后就可以加入到各个国家对应的地区了。
  2. 将几何存储在 excel 中不是一个好的选择(场的长度、正在使用的 crs 等)。存储空间对象的更好选择是 .gpkg 格式。

请在此处找到如何生成您提到的数据集。

我会在这里使用 geographic regions classification of the UN。这在 countrycode 包中可用,所以基本上我将每个 ISO-3 国家代码映射到相应的区域。之后,我按地区对国家/地区进行分组,这样我就可以按地区拥有一个单一的几何图形。最后,我提取边界框并将它们附加到数据集:

library(giscoR)
library(countrycode)
library(sf)

world <- gisco_get_countries()

# Add the subregion

world$region <- countrycode(world$ISO3_CODE,
                                origin = "iso3c",
                                destination = "un.regionsub.name")

#> Warning in countrycode_convert(sourcevar = sourcevar, origin = origin, destination = dest, : Some values were not matched unambiguously: ATA, CPT, XA, XB, XC, XD, XE, XF, XG, XH, XI, XL, XM, XN, XO, XU, XV

unique(world$region)
#>  [1] "Latin America and the Caribbean" "Polynesia"                      
#>  [3] "Western Europe"                  NA                               
#>  [5] "Southern Europe"                 "Western Asia"                   
#>  [7] "Southern Asia"                   "Sub-Saharan Africa"             
#>  [9] "Australia and New Zealand"       "Eastern Europe"                 
#> [11] "Northern America"                "South-eastern Asia"             
#> [13] "Eastern Asia"                    "Micronesia"                     
#> [15] "Northern Europe"                 "Melanesia"                      
#> [17] "Central Asia"                    "Northern Africa"


# Group regions
library(dplyr)
library(ggplot2)


subworld <- world %>% 
  group_by(region) %>%
  # Mock the data field
  summarise(data=n())

ggplot(subworld) +
  geom_sf(aes(fill=region))

# Create final table
bbox <- lapply(st_geometry(subworld), st_bbox) %>%
  bind_rows() %>% 
  mutate(across(where(is.numeric), as.double))


# Final dataset

end <- subworld %>% bind_cols(bbox) %>%
  select(region, data, xmin, xmax, ymin, ymax)

head(end)
#> Simple feature collection with 6 features and 6 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -180 ymin: -59.51912 xmax: 180 ymax: 81.85799
#> Geodetic CRS:  WGS 84
#> # A tibble: 6 x 7
#>   region               data   xmin   xmax  ymin   ymax                  geometry
#>   <chr>               <int>  <dbl>  <dbl> <dbl>  <dbl>        <MULTIPOLYGON [°]>
#> 1 Australia and New ~     6 -178.  179.   -53.2 -9.21  (((143.5617 -13.77157, 1~
#> 2 Central Asia            5   46.6  87.3   35.2 55.4   (((50.3399 45.05235, 50.~
#> 3 Eastern Asia            7   73.6 146.    18.2 53.5   (((120.8954 22.336, 120.~
#> 4 Eastern Europe         10 -180   180.    41.2 81.9   (((68.7333 76.49168, 68.~
#> 5 Latin America and ~    48 -118.    3.43 -59.5 32.7   (((-64.01772 -54.74885, ~
#> 6 Melanesia               5 -180   180.   -22.7 -0.826 (((178.2331 -17.34448, 1~

reprex package (v2.0.1)

创建于 2022-03-23