我有3个shp文件可用于创建城市地图:
land.shp(绘制水上土地的多边形)
road.shp(绘制所有道路的多边形,请注意其中一些是“圆形道路”,这意味着中间有一个洞)
building.shp(绘制所有建筑物的多边形)
我使用QGIS绘制了想要的地图,然后使用ggplot播放了land.shp,然后是road.shp并构建了shp来再次执行该操作。以下是Google地图的输出,以说明我的问题:
您会看到它们之间有2座桥梁和一些大海(我没有sea shp,我只是将背景设置为蓝色),并用蓝点标记。在R中,该区域应该是一个孔,但全部用灰色填充。相同的问题出现在用红色圆点标记的灰色区域(这是一块土地)上,而用绿色圆点标记的灰色区域(这是一栋被道路包围的建筑物)。
我将在road.shp的孔中有陆地/海洋/建筑物,我无法使用R来显示它们。
谁能教我如何显示R中road.shp层背后的内容?谢谢。
最佳答案
绘制带孔多边形的一种常见约定是:
一个封闭的多边形,其点沿逆时针方向发展,形成一个实心形状
点按顺时针方向旋转的闭合多边形形成一个孔
因此,让我们构造一些数据并绘制:
library(ggplot2)
ids <- letters[1:2]
# IDs and values to use for fill colour
values <- data.frame(
id = ids,
value = c(4,5)
)
# Polygon position
positions <- data.frame(
id = rep(ids, each = 10),
# shape hole shape hole
x = c(1,4,4,1,1, 2,2,3,3,2, 5,10,10,5,5, 6,6,9,9,6),
y = c(1,1,4,4,1, 2,3,3,2,2, 5,5,10,10,5, 6,9,9,6,6)
)
# Merge positions and values
datapoly <- merge(values, positions, by=c("id"))
ggplot(datapoly, aes(x=x, y=y)) +
geom_polygon(aes(group=id, fill=factor(value))) +
scale_fill_discrete("Key")