0

我有一堆包含在类的对象中的 shapefile:

[1] "SpatialPolygonsDataFrame" attr(,"package") [1] "sp"

我想以km2 获得这些shapefile 的面积。由于这些 shapefile 分布在全球各地,因此我使用“等面积”投影对 shapefile 进行了投影,即:兰伯特圆柱等面积“+proj=cea +lon_0=-80”,以确保这些区域不会受纬度影响而变形。

我这样做是这样的:

require(maptools)

data.shape<-readShapePoly("species_distributions.shp",proj4string=CRS("+proj=cea +lon_0=-80"))

我以这种方式计算面积:

sapply(slot(data.shape, "polygons"), slot, "area")->areas

但是,我获得的区域很奇怪……值如下:7.861879e-02 1.819334e+00 4.510745e+00。他们只是没有意义...

我究竟做错了什么?我怎样才能以平方公里为单位获得这些区域?(考虑到这些 shapefile 分布在全球...)

任何帮助将不胜感激。非常感谢您提前。

蒂娜。

4

1 回答 1

0

迟到的答案,但这是你要找的吗?

require(geosphere)
require(maptools)
data(wrld_simpl)

polys = lapply(wrld_simpl@polygons, function(p) p@Polygons)

poly_areas = sapply(polys, function(p){
  coords = lapply(p, function(p) p@coords)
  ind_areas = lapply(coords, areaPolygon)
  sum(unlist(ind_areas))
})

data.frame(id = wrld_simpl@data$NAME, area = poly_areas/1e+06)
于 2016-02-23T15:03:11.707 回答