我如何知道世界各地(R中)分布的shapefile的面积(以km2为单位)?

时间:2014-08-11 22:06:30

标签: r gis area shapefile maptools

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

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

我想以km2获得这些shapefile的区域。由于这些shapefile分布在全球各地,我已经预测了这些shapefile具有相同的区域"投影,即:Lambert圆柱等面积" + 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分布在全球各地......)

任何帮助都将非常感激。非常感谢你提前。

蒂娜。

1 个答案:

答案 0 :(得分: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)