我有一堆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分布在全球各地......)
任何帮助都将非常感激。非常感谢你提前。
蒂娜。
答案 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)