将Map包中的(两个半)国家合并为R中的一个Map对象

fdbelqdn  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(93)

我正在寻找一张将德国、奥地利和瑞士部分地区组合到一个空间对象中的Map。这个区域应该代表那三个国家的德语区。我有一些部分在适当的位置,但找不到将它们组合起来的方法。如果有一个完全不同的解决方案来解决这个问题,我仍然感兴趣。
我得到德国和奥地利的Map:

require(maps)
germany <- map("world",regions="Germany",fill=TRUE,col="white") #get the map
austria <- map("world",regions="Austria",fill=TRUE,col="white") #get the map

瑞士更复杂,因为我只需要60-70%的人主要说德语。这样做的州(取自census report)是

cantonesGerman = c("Uri", "Appenzell Innerrhoden", "Nidwalden", "Obwalden", "Appenzell Ausserrhoden", "Schwyz", "Lucerne", "Thurgau", "Solothurn", "Sankt Gallen", "Schaffhausen", "Basel-Landschaft", "Aargau", "Glarus", "Zug", "Zürich", "Basel-Stadt")

州名可以与gadm.org/country中的数据一起使用(选择Switzerland & SpatialPolygonsDataFrame -〉Level 1或通过direct link),从gadm-object中获取德语区:

gadmCH = readRDS("~/tmp/CHE_adm1.rds")

dataGermanSwiss <- gadmCH[gadmCH$NAME_1 %in% cantonesGerman,]

我现在错过了将这些信息合并在一起的合并步骤。结果应该如下所示:
x1c 0d1x它代表了一个由合并区域的等高线组成的组合Map(德国+奥地利+ ~70%的瑞士),没有国家之间的边界。如果添加和删除国家之间的边界是可参数化的,那就太好了,但不是必须的。

3npbholx

3npbholx1#

你可以这样做:
获取所需的面

library(raster)
deu <- getData('GADM', country='DEU', level=0)
aut <- getData('GADM', country='AUT', level=0)
swi <- getData('GADM', country='CHE', level=1)

瑞士各州的子集(这里是一个示例列表,不是正确的列表);在R中不需要用于这些事情的循环。

cantone <- c('Aargau', 'Appenzell Ausserrhoden', 'Appenzell Innerrhoden', 'Basel-Landschaft', 'Basel-Stadt', 'Sankt Gallen', 'Schaffhausen', 'Solothurn', 'Thurgau', 'Zürich')
GermanSwiss <- swi[swi$NAME_1 %in% cantone,]

聚合(溶解)瑞士内部边界

GermanSwiss <- aggregate(GermanSwiss)

将这三个国家合并

german <- bind(deu, aut, GermanSwiss)
german <- aggregate(german)

相关问题