如何用ggplot2分别绘制德国科隆与柏林两座城市的地图?
获取科隆、柏林城市地图数据并绘制的方法
下面介绍两种适合在R中获取德国科隆、柏林城市地图数据的实用方法,配合ggplot2即可完成绘图:
方法1:使用sf+geodata获取行政边界数据
适合快速获取标准城市行政范围,操作简单:
- 先安装并加载所需包:
install.packages(c("sf", "geodata")) library(sf) library(geodata)
- 下载德国城市级行政边界数据(
level=3对应城市层级),并筛选目标城市:
# 下载德国行政边界数据,临时存储在系统临时目录 germany_cities <- gadm(country = "DEU", level = 3, path = tempdir()) # 筛选科隆(德语名为Köln)和柏林 cologne <- germany_cities[germany_cities$NAME_3 == "Köln", ] berlin <- germany_cities[germany_cities$NAME_3 == "Berlin", ]
- 用ggplot2绘制地图(sf对象可直接用
geom_sf()):
# 绘制科隆地图 ggplot() + geom_sf(data = cologne) + labs(title = "科隆城市地图") # 绘制柏林地图 ggplot() + geom_sf(data = berlin) + labs(title = "柏林城市地图")
方法2:使用osmdata从OpenStreetMap获取精细化数据
如果需要街道、建筑等更细节的地图内容,可使用OpenStreetMap的数据:
- 安装并加载包:
install.packages("osmdata") library(osmdata)
- 搜索并获取目标城市的边界及细节数据:
# 获取科隆的边界范围 cologne_bbox <- getbb("Cologne, Germany") # 提取城市级行政边界(admin_level=8对应城市层级) cologne_osm <- opq(cologne_bbox) %>% add_osm_feature(key = "admin_level", value = "8") %>% osmdata_sf() # 提取边界多边形数据 cologne_poly <- cologne_osm$osm_polygons # 柏林同理,只需替换搜索词 berlin_bbox <- getbb("Berlin, Germany") berlin_osm <- opq(berlin_bbox) %>% add_osm_feature(key = "admin_level", value = "8") %>% osmdata_sf() berlin_poly <- berlin_osm$osm_polygons
- 用ggplot2绘图:
ggplot() + geom_sf(data = cologne_poly) + labs(title = "科隆精细化地图")
注意事项
geodata首次运行会下载数据,耗时取决于网络速度;若需长期保存数据,可将path参数改为自定义本地路径。osmdata可通过调整add_osm_feature的参数,获取不同类型的地理要素(如key="highway"获取街道)。
内容的提问来源于stack exchange,提问作者Corrector
相关产品推荐
相关产品推荐

