Hi Joe,

I assume you want to append the area to the attribute data frame. If yes, the
function pasted below should help you out, assuming your study area
isn't too large. It is based on re-projecting the data into an area
preserving projection, and then calculating the areas in that
projection. I've mostly worked with it in British Columbia, so use a BC
Albers equal area project (EPSG:3005). The map units of your projection
will likely be in meters, so the calculated areas will be in m^2, which
will be easy to convert.

Dan

The code:

# The function areaPolygons() returns the area of the polygons in a
# SpatialPolygons or SpatialPolygonsDataFrame object. If a proj4string is
# provided then the areas are calculated in the map units of this
projection.
# If it is not provided, then the areas are calculated in the map units
of the
# original SpatialPolygon or SpatialPolygonsDataFrame object. If the
projection
# of the sp object is geographic (i.e., lon/lat) the areas are in
decimal degrees^2.

# Requires the sp and rgdal packages

# Programmer: Dan Putler
# Created: 06Nov09
# Modified: 06Nov09

areaPolygons<- function(spPoly, proj4string = NULL) {
     if(class(spPoly)[[1]] != "SpatialPolygonsDataFrame"&
class(spPoly)[[1]] != "SpatialPolygons") {
         stop("spPoly must be a SpatialPolygonsDataFrame or a
SpatialPolygons object.")
     }
     require(sp)
     require(rgdal)
     if(!is.null(proj4string)) {
         if(class(proj4string)[[1]] != "CRS") {
             stop("The proj4string must be of class CRS")
         }
         spP<- spTransform(spPoly, CRS = proj4string)
     }
     else {
         spP<- spPoly
     }
     areas<- unlist(lapply(s...@polygons, function(x) a<- x...@area))
     return(areas)
}


On 09/03/2010 03:30 PM, brwin...@aol.com wrote:
 Good Afternoon
 Does any one know of a package/function that could be used to compute the 
square kilometers for polygons in a long-lat projected shapefile?
 I can access the values in the "area" slots in the object resulting from using maptool's  
"readShapePoly" command.  I have approximated the km^2 from these values by using one of the polygons's (such 
as a given state's) known area in km^2 and rescaling the polygon's "area" relative to the state's known area. 
 I then applied this "scaling factor" to the other polygons in my shapefile object to approximate the other 
polygons' are in km^2.

 However, if I understand things correctly, my approximate "area to km^2" scaling  will 
become increasing distorted as I move north or south relative to my original 
"normalizing" state.  Is there a function that can compensate for changes in latitude 
when computing the polygon areas associated with long-lat polygons?  I hope this question is 
somewhat coherent
 Thanks
 Joe




        [[alternative HTML version deleted]]

 _______________________________________________
 R-sig-Geo mailing list
 R-sig-Geo@stat.math.ethz.ch
 https://stat.ethz.ch/mailman/listinfo/r-sig-geo


_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to