[GRASS-user] strategy required

G'day Grass listers,

I'm very new at using Grass, and I'd be most appreciative if someone could suggest a strategy to accomplish the following:

I have a map of part of Australia, subdivided into local government areas (LGAs). Both the coastline and the LGA boundaries are vector layers, referenced by latitude and longitude.

I want to sample the map at each point on a grid (say at each 0.1 of lat and 0.1 of long). At a sample point I will place a rectangle of a given size oriented in a NW-SE direction, with the westernmost corner of the rectangle on the sample point. I then want to calculate the proportion of each LGA which is enclosed in the rectangle (there may be up to 6 or so).

I'm not familiar enough with Grass to know how best to approach this. I'd be very grateful for any suggested strategies.

With thanks,
John Field
Adelaide, South Australia

Sorry, I forgot to say I'm using the native Windows version of Grass.

John

At 08:53 PM 22/06/2008, John Field wrote:

G'day Grass listers,

I'm very new at using Grass, and I'd be most appreciative if someone could suggest a strategy to accomplish the following:

I have a map of part of Australia, subdivided into local government areas (LGAs). Both the coastline and the LGA boundaries are vector layers, referenced by latitude and longitude.

I want to sample the map at each point on a grid (say at each 0.1 of lat and 0.1 of long). At a sample point I will place a rectangle of a given size oriented in a NW-SE direction, with the westernmost corner of the rectangle on the sample point. I then want to calculate the proportion of each LGA which is enclosed in the rectangle (there may be up to 6 or so).

I'm not familiar enough with Grass to know how best to approach this. I'd be very grateful for any suggested strategies.

With thanks,
John Field
Adelaide, South Australia
_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

No virus found in this incoming message.
Checked by AVG.
Version: 8.0.100 / Virus Database: 270.4.1/1512 - Release Date: 21/06/2008 9:27 AM

On 22/06/08 13:23, John Field wrote:

G'day Grass listers,

I'm very new at using Grass, and I'd be most appreciative if someone could suggest a strategy to accomplish the following:

I have a map of part of Australia, subdivided into local government areas (LGAs). Both the coastline and the LGA boundaries are vector layers, referenced by latitude and longitude.

I want to sample the map at each point on a grid (say at each 0.1 of lat and 0.1 of long). At a sample point I will place a rectangle of a given size oriented in a NW-SE direction, with the westernmost corner of the rectangle on the sample point. I then want to calculate the proportion of each LGA which is enclosed in the rectangle (there may be up to 6 or so).

I'm not familiar enough with Grass to know how best to approach this. I'd be very grateful for any suggested strategies.

One idea:

Preliminaries:

- check here: http://spreadsheets.google.com/pub?key=pB-ffIn4C2dTcTacV_W1cOA for the GUI paths to most commands mentioned below

- I'm not sure how reliable area calculations are in lat-long locations, maybe you could consider using a projected system
- you will need a SQL-compliant database backend for this, the easiest would probably be SQLITE as this is installed with GRASS, to do this use db.connect to change your default database connection and then g.copy your LGA layer, thus automatically creating an SQLite table (alternative: use db.copy to copy attribute table from default dbf to SQLite database and v.db.connect to reconnect your LGA layer to that new table)

And here's the "strategy":

- use v.db.addcol to add a column 'area' to your LGA layer
- use v.to.db to add the area of each LGA to the table
- create grid with v.mkgrid - if you use the position=coor option, you can give an angle of rotation to your grid
- use v.overlay, operator=or to overlay grid and LGA; the result will be a layer with new entities created by the combination of all boundaries of both layers, and a table containing all fields of both attribute tables, prefixed a_ and b_ for each original layer respectively.
- use v.db.addcol (let's call that column 'newarea') and v.to.db (as above) to add the areas of the new entities to the attribute table of the new layer (make sure you use the same units as in the previous call to v.to.db)
- then use an SQL query to calculate the areas by grid cell (assuming that key columns are named 'cat' and that the grid is layer a and the LGA layer b, something like:

SELECT a_cat, b_cat, sum(newarea)/b_area as proportion_LGAarea from NameOfNewLayer group by a_cat, b_cat

(you need something like the sum(newarea) if the same LGA creates several new entities in one grid cell)

Moritz