将 google 地图与空间多边形结合使用时多边形形状混乱
Messed up polygons shape when combining google map with Spatial Polygons
我在将来自 Google 地图 Api 的地图与使用来自 ggplot2
的 geom_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
我在将来自 Google 地图 Api 的地图与使用来自 ggplot2
的 geom_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