我正在尝试使用R中的“area.poly”计算两个shapefile之间的重叠。我使用了以下编码,我的问题如下:
我尝试将shapefile2转换为gpc.poly,结果是shapefile进入类“list”。因此我使用area.poly不起作用。
任何人都知道为什么shapefile1现在要转换为gpc.poly类?
shapefile包含以下扩展名:dbf,prj,qpj,shp,shx
我想要使用的代码:
- >图书馆(rgeos)
- > p1< - as(shapefile1,“gpc.poly”) - > p2< - as(shapefile2,“gpc.poly”)
- > area.poly(相交(P1,P2)) 在这里得到错误!
- > STR(shapefile1) 结果:class(list)
答案 0 :(得分:0)
为什么要使用intersect(...)
和area.poly(...)
?请改用gIntersection(...)
和gArea(...)
。
请注意,大部分内容仅用于设置演示。显然,你已经拥有了两个shapefile,所以你会在最后开始。
library(raster) # for getData(...); just for this example
library(rgdal) # for spTransform
library(rgeos) # for gIntersection(...), gArea(...), etc.
# map of the UK - just an example
UK <- getData("GADM",country="GBR",level=0)
OSGB.36 <- "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs"
UK <- spTransform(UK,CRS(OSGB.36)) # need projection with meaningful units
# circle with 300km radius from centroid of UK
ctr <- coordinates(gCentroid(UK))
th <- 2*pi*seq(0,.99,by=0.01)
pts <- data.frame(long=ctr[1]+3e5*cos(th),lat=ctr[2]+3e5*sin(th))
pts <- rbind(pts,pts[1,])
circle <- SpatialPolygons(list(Polygons(list(Polygon(pts)),1)),
proj4string=CRS(proj4string(UK)))
## you start here...
plot(UK)
plot(circle,add=T)
sp <- gIntersection(UK,circle) # calculate intersection
plot(sp,add=T, col="red")
gArea(sp)/1e6 # calculate area of intersection in sq km
# [1] 149638.8