将 google 地图与空间多边形结合使用时多边形形状混乱

Messed up polygons shape when combining google map with Spatial Polygons

我在将来自 Google 地图 Api 的地图与使用来自 ggplot2geom_polygon 构建的地图相结合时遇到问题。当我单独绘制每张地图时,没有出现任何奇怪的东西,但是当我将它们组合起来时,出现了一些直线(直线),弄乱了我打算突出显示的边界。

1) 我用来构建带有黑色边框的多边形的数据来自这个 link。该文件的确切 url 在我下面的代码中。有时需要手动解压文件,因此下面下载数据的代码可能无法运行:

path <- getwd()
fileName <- "R05.zip"
if (!file.exists(fileName)) {
    urlFile = "http://www.censo2017.cl/wp-content/uploads/2016/12/R05.zip" 
            download(urlFile, dest = "./R05.zip", mode ="wb")
}
if (!dir.exists("./R05")) {
    unzip("R05.zip")
}

2) 然后我加载我将用来构建多边形的 shapefile。

distritos <- readOGR( dsn= paste(getwd(), "/R05", sep = ""),
                  layer="Distritos_Censales", 
                  encoding = "UTF-8", stringsAsFactors = FALSE)

3) select 我感兴趣的行政区划

 distritos <- distritos[distritos@data$DESC_COMUN=="QUILPUÉ", ]

4) 然后是我感兴趣的地区(多边形):

distritos <- distritos[distritos@data$DESC_DISTR=="EL RETIRO" |
                           distritos@data$DESC_DISTR=="BELLOTO NORTE" |
                           distritos@data$DESC_DISTR=="VALENCIA" | 
                           distritos@data$DESC_DISTR=="MENA" |
                           distritos@data$DESC_DISTR=="BELLOTO SUR" |
                           distritos@data$DESC_DISTR=="ALTO QUILPUÉ" |
                           distritos@data$DESC_DISTR=="EL SAUCE", ]

5) 从distritos的边界构建底图。为了那个原因, 我使用函数从 this Whosebug 问题

获取地图的中心
bbox(distritos)
MapCenter <- function(x1, y1, x2, y2){
    center.x <- x1 + ((x2 - x1) / 2)
    center.y <- y1 + ((y2 - y1) / 2)
    center <- c(center.x, center.y)
    center
}
mcdistritos <- MapCenter(bbox(distritos)[1,1], bbox(distritos)[2,1], 
bbox(distritos)[1,2], bbox(distritos)[2,2])
basemap <- get_googlemap(mcdistritos, zoom = 13, 
                          maptype = "roadmap",
                          color = "bw",
                          style = "feature:administrative|element:labels|visibility:off")
basemap <- ggmap(basemap , extent = "device")

6) 准备 shapefile 数据以用 ggplot2

绘制它
distritos.fort <- fortify(distritos, region = "DESC_DISTR")

7) 将两张地图绘制在一起

basemap + 
geom_polygon(data = distritos.fort, 
                    aes(x = long, y = lat),
                        colour = "black", 
                          fill = NA) + coord_map()

我尝试缩小底图,以防多边形边界被弄乱,因为它们不适合底图,但我得到了相同的结果,只是地图变小了。有谁知道如何修复它?

您需要为您的审美添加一个群组映射。例如

geom_polygon(data = distritos.fort, 
                    aes(x = long, y = lat, group = group),
                        colour = "black",
                          fill = NA) + coord_map()

目前你有一条连续的路径。组美学将您的数据分成不同的多边形。

我无法提取您的数据,因此我不知道您需要的组的确切映射。但是看看其他强化示例和文档,我相信它是 group = group