将两个多边形区域合并为R中的单个多边形区域

时间:2014-01-24 08:19:20

标签: r spatstat

我不熟悉R中的空间数据和多边形。

我有两个单独的形状文件,包含两个从Google地球中提取的多边形。因此,基本上第一个形状文件是位置(例如购物中心等),第二个形状文件是围绕第一个位置的三公里半径。我将两个形状文件作为SpatialPolygonsDataFrames读入R中。我使用以下代码:

library(maptools)
library(sp)
library(spatstat)
options(digits=10) 

# Read polygon a

a <- readShapeSpatial(file.choose())
class(a)

spatstat.options(checkpolygons=FALSE)

r <- slot(a,"polygons")
r <- lapply(r, function(a) { SpatialPolygons(list(a)) })
windows <- lapply(r, as.owin)
Ploy_One <- tess(tiles=windows)

# Read polygon b

b <- readShapeSpatial(file.choose())
class(b)

spatstat.options(checkpolygons=FALSE)

s <- slot(b,"polygons")
s <- lapply(s, function(b) { SpatialPolygons(list(b)) })

windows <- lapply(s, as.owin)
Poly_Two <- tess(tiles=windows)

# Read polygon b

Combined_Region <- intersect.tess(Poly_One, Poly_Two)
plot(Combined_Region)

但是,我没有得到两个多边形的组合视图,(另一个多边形的视图)。

如果有人对如何编码这个将两个多边形区域合并到R中的单个多边形区域有一些建议,我会非常感激!

1 个答案:

答案 0 :(得分:4)

如果您承诺使用spatstat软件包,这可能不会非常有用。如果没有,请继续阅读......

如果要做的只是将多边形绘制为单独的图层,请使用ggplot

library(ggplot2)
library(sp)
library(maptools)

setwd("<directory with all your files...>")

poly1 <- readShapeSpatial("Polygon_One")
poly2 <- readShapeSpatial("Polygon_Two")
# plot polygons as separate layers,,,
poly1.df <- fortify(poly1)
poly2.df <- fortify(poly2)
ggplot() +
  geom_path(data=poly1, aes(x=long,y=lat, group=group))+
  geom_path(data=poly2, aes(x=long,y=lat, group=group), colour="red")+
  coord_fixed()

如果需要将它们组合到一个spatialPolygonDataFrame中,请使用此方法。这里的细微差别在于,如果两个图层具有共同的多边形ID,则无法使用spRbind(...)。因此,对spChFIDs(...)的调用会将poly2(圆圈)中的一个多边形的ID更改为&#34; R.3km&#34;。

# combine polygons into a single shapefile
poly.combined <- spRbind(poly1,spChFIDs(poly2,"R.3km"))
# plot polygons using ggplot aesthetic mapping
poly.df <- fortify(poly.combined)
ggplot(poly.df) + 
  geom_path(aes(x=long, y=lat, group=group, color=group)) + 
  scale_color_discrete("",labels=c("Center", "3km Radius")) +
  coord_fixed()
# plot using plot(...) method for spatialObjects
plot(poly.combined)

你会注意到,在这些情节中,&#34;圈&#34; ISN&#39;吨。这是因为我们使用了长/纬,你在赤道以南很远。数据需要重新投影。事实证明南非的适当CRS为utm-33

wgs.84 <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
utm.33 <- "+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"
proj4string(poly.combined) <- CRS(wgs.84)
poly.utm33 <- spTransform(poly.combined,CRS(utm.33))
poly.df    <- fortify(poly.utm33)
ggplot(poly.df) + 
  geom_path(aes(x=long, y=lat, group=group, color=group)) + 
  scale_color_discrete("",labels=c("Center", "3km Radius")) +
  theme(axis.text=element_blank()) + labs(x=NULL,y=NULL) +
  coord_fixed()

现在圈子是。