I read from somewhere here that a UTM raster's pixel count ratio is 1 pixel = 1 meter. I am working on a raster that says the island is 4.03 km² in area but a quick google search says the island is 4.8 km². I need to make sure that my area calculations are accurate.

How accurate is a raster's area to the real world? Does this depend on whether the data are projected on WGS 84?


You are wrong to assume that 1 grid cell (pixel) side is 1 meter in UTM or any other coordinate reference system. It can be anything (up to ~600 km for a single column raster, if you want to stay within UTM zone boundaries).

It is also important to note that cell size is not constant. With a longitude/latitude coordinate reference system (CRS), I assume that is what you erroneously refer to with WGS84, it changes with latitude. With a planar CRS cell size may change (decrease) as you move away from the origin of the CRS (unless you are using an equal-area CRS; UTM is not equal-area); there is an illustration here). For a very small area as in your example this variation is minimal.

The area covered by a raster should be very similar to that of a vector representation, except for the extreme case where the island is reduced to only a few grid cells.

Here is some R code to illustrate this for the Isle of Man, for vector data (lon/lat and UTM) and raster data with 30 arc-seconds, 10 m and 1 km spatial resolution (length of the side of each cell).

g <- getData("GADM", country="Isle of Man", level=0)
g <- vect(g)
# [1] "+proj=longlat +datum=WGS84 +no_defs"

# rasterize the vector data to a lon/lat raster
# with a 1/120=30 seconds spatial resolution (a bit less than 1 km2)
r0 <- rast(g, res=1/120)
r0 <- rasterize(g, r0)

Transform the vector data to UTM (but staying with the WGS84 datum) and rasterize again.

gutm <- project(g, "+proj=utm +zone=30 +datum=WGS84")
crs(gutm, proj4=TRUE)
# [1] "+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs"

# 10 m resolution
r1 <- rast(gutm, res=10)
#[1] 10 10
r1 <- rasterize(gutm, r1)

# 1 km resolution
r2 <- rast(gutm, res=1000)
r2 <- rasterize(gutm, r2)

Now compute the size of the island for the different representations.

area_lonlat <- area(g)
area_utm <- area(gutm)
area_rst_lonlat_1km <- area(r0)
area_rst_utm_10m <- area(r1)
area_rst_utm_1km <- area(r2)

akm2 <- cbind(area_lonlat, area_utm, area_rst_lonlat_1km, 
             area_rst_utm_10m, area_rst_utm_1km) / 1000000

round(akm2, 2)
     area_lonlat area_utm area_rst_lonlat_1km area_rst_utm_10m area_rst_utm_1km
[1,]      579.67   579.35              579.72           579.36              579

Above are the five estimates of the island size in km2. There is some minor variation, but less than what you report. With the 10 m resolution it is only 0.07 km2 compared to the polygon.

Relative to the size of your island, 0.8 km2 is a lot, so you may need to use a higher spatial resolution. (It depends on what you ultimate goal is, presumably that is not to estimate the island size).

Based on your description I am assuming you used the wrong spatial resolution. There are other possibilities: the raster data can be of poor quality, the other source can be wrong. But you do not provide much to go on; you do not mention the island's name, nor how you calculated its size.

  • 1
    Thanks for the answer I understand it now. Im sorry I did not include much about the problem. I was using a raster data with 1 arc second global 30 meters spatial resolution. The cell size of the raster I produced was at 30.9 x and y so I think it might've been the problem. I am working with a susceptibility map of Bohol Island which is 4.9 km^2. I think another reason the area I got was different is because the raster might have been reduced to my smallest raster data of the island when I ran a weighted linear combination.
    – Marc James
    May 7 at 10:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.