如何修改sf对象的bounding box?瑞典选区GeoJSON数据可视化异常问题排查
问题根源与解决方案
你遇到的问题并非需要修改bounding box,而是GeoJSON文件的坐标参考系统(CRS)标注错误导致的:
- 文件里标注的是WGS84(经纬度,坐标范围应该是经度-180180、纬度-9090),但实际存储的坐标是UTM格式的米制数值(你的bounding box显示x在59万到70万之间,y在658万到672万之间),这种不匹配让
sf和ggplot2识别混乱,才出现了警告和异常可视化。
具体解决步骤
1. 确认正确的CRS
瑞典乌普萨拉省所在区域属于UTM 33N投影,对应的EPSG代码是32633。
2. 修正数据的CRS并可视化
先把错误的WGS84标注替换为正确的UTM投影,之后如果需要转成经纬度格式(WGS84)再做转换即可。修正后的代码如下:
library(sf) library(ggplot2) # 下载并解压数据 url <- "https://www.val.se/download/18.14c1f613181ed0043d560bf/1662820378349/valdistrikt-uppsala-lan.zip" temp <- tempdir() download.file(url, paste0(temp, "/uppsala-lan.zip")) unzip(paste0(temp, "/uppsala-lan.zip"), exdir = "data") file <- paste0("data/", list.files("data")) # 读取数据,修正CRS x <- st_read(file) |> # 替换错误的CRS标注为正确的UTM 33N st_set_crs(32633) # 可视化(此时不会有警告) x |> ggplot() + geom_sf() # 如果后续需要转成WGS84经纬度格式,执行下面这行: # x_wgs84 <- st_transform(x, 4326)
运行这段代码后,sf就能正确识别坐标系统,ggplot的可视化也会正常显示乌普萨拉省的选举区边界,那个警告也会消失。
内容的提问来源于stack exchange,提问作者FilipW
相关产品推荐
相关产品推荐

