R中的Area.poly:为什么Shapefile会转换为类“list”而不是“gpc.poly”?

时间:2014-07-25 14:52:48

标签: r converter overlap

我正在尝试使用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)

1 个答案:

答案 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