[GRASS-user] how to calculate area of voronoi polygons considering the boundary of the catchment

daljeet sachdev_dj at yahoo.com
Fri Sep 4 07:40:30 EDT 2009


The issue was that the contours vector was 3d. Now i could put the centroids
and add the area within the boundaries.

I am struck at how to associate the area (cat|area) with the associated
isohyetal lines? Any idea.

Thanks
Daljeet 


daljeet wrote:
> 
> Thanks.
> 
> I am using the first method that you suggested. But it fails to create
> centroids whereas there are multiple isohyetal strips now and each should
> have been given the centroid. To give you the details on what i did.
> 
> In real scenario, we will have the defined catchment area (which will be a
> close polygon shaped vector) with rainfall measurements on various gauge
> points (some gauge points will be within the catchment boundary and some
> will be outside that catchment area, but within the region of the
> catchment vector). Please correct me if I am wrong.
> 
> I am simulating the above scenario by
> a) making a xyz point data file. x,y being lat and long and z being the
> measurement of rainfall.
> b) catchment is represented by a vector (basin_v)
> 
>> g.region vect=basin_v
> 
> #import the xyz pt data
>> v.in.ascii x=2 y=1 cat=0 input="rain_data" out="rainpoint_v" columns="x
>> double precision, y double precision, rain_info double precision" fs="\t"
>> skip=1 --o
> 
>>MASK applied (which represents the raster of the catchment area with each
cell value equal to 1) 
> 
>>v.surf.rst rainpoint_v zcol=rain_info elev=rain_rst --o
> 
>>r.contour step=1 input=rain_rst output=rain_con_v
> 
> At this stage, i have two seperate vectors, a) contour vector (rain_con_v)
> which has the lines only b) vector representing the catchment area
> (basin_v) whose topo details are as follows
> 
>>v.info rain_con_v -t
> nodes=7
> points=0
> lines=7
> boundaries=0
> centroids=0
> areas=0
> islands=0
> faces=0
> kernels=0
> primitives=7
> map3d=1
> 
> Please note the below output. This may be reason of failure.
>>v.info basin_v -t
> nodes=2
> points=0
> lines=0
> boundaries=1
> centroids=1
> areas=1
> islands=1
> faces=0
> kernels=0
> primitives=2
> map3d=0
> 
> Now, as you suggested, i need to apply the v.clean (with break) to create
> the nodes at the intersection of isolines and boundary of the catchment
> vector.
> 
> And for the input of v.clean, I patched the above two vectors using
> v.patch. Please correct if this is the right step or something else would
> have been done?
> 
>> v.patch input=rain_con_v,basin_v out=rain_comp_v
> WARNING: Vector map <rain_comp_v> already exists and will be overwritten
> Patching vector map <rain_con_v at RnD>...
> Patching vector map <basin_v at RnD>...
> Building topology for vector map <rain_comp_v>...
> Registering primitives...
> 9 primitives registered
> 3643 vertices registered
> Building areas...
>  100%
> 1 areas built
> 1 isles built
> Attaching islands...
>  100%
> Attaching centroids...
>  100%
> Number of nodes: 9
> Number of primitives: 9
> Number of points: 0
> Number of lines: 7
> Number of boundaries: 1
> Number of centroids: 1
> Number of areas: 1
> Number of isles: 1
> Intersections at borders will have to be snapped
> Lines common between files will have to be edited
> The header information also may have to be edited
> v.patch complete. 2 vector maps patched
> 
> rain_comp_v looks like this
> 
>  http://n2.nabble.com/file/n3568825/rain_comp_v.png 
> 
>> v.clean in=rain_comp_v out=rain_comp tool=break --o
> --------------------------------------------------
> Tool: Threshold
> Break: 0.000000e+00
> --------------------------------------------------
> WARNING: Vector map <rain_comp> already exists and will be overwritten
> Copying vector lines...
> Rebuilding parts of topology...
> Building topology for vector map <rain_comp>...
> Registering primitives...
> 9 primitives registered
> 3643 vertices registered
> Number of nodes: 9
> Number of primitives: 9
> Number of points: 0
> Number of lines: 7
> Number of boundaries: 1
> Number of centroids: 1
> Number of areas: -
> Number of isles: -
> --------------------------------------------------
> Tool: Break lines at intersections
> --------------------------------------------------
> Rebuilding topology for output vector map...
> Building topology for vector map <rain_comp>...
> Registering primitives...
> 28 primitives registered
> 3662 vertices registered
> Building areas...
>  100%
> 1 areas built
> 1 isles built
> Attaching islands...
>  100%
> Attaching centroids...
>  100%
> Number of nodes: 28
> Number of primitives: 28
> Number of points: 0
> Number of lines: 26
> Number of boundaries: 1
> Number of centroids: 1
> Number of areas: 1
> Number of isles: 1
> 
>>v.centroids rain_comp out=rain_cen option=add --o
> WARNING: Vector map <rain_cen> already exists and will be overwritten
> Processing features...
> 0 new centroids placed in output map
> Copying attribute table(s)...
> Building topology for vector map <rain_cen>...
> Registering primitives...
> 28 primitives registered
> 3662 vertices registered
> Building areas...
>  100%
> 1 areas built
> 1 isles built
> Attaching islands...
>  100%
> Attaching centroids...
>  100%
> Number of nodes: 28
> Number of primitives: 28
> Number of points: 0
> Number of lines: 26
> Number of boundaries: 1
> Number of centroids: 1
> Number of areas: 1
> Number of isles: 1
> v.category complete. 0 features modified.
> 
> Area is still 1 and centroid is 1. If i have understood it correctly, then
> we should have multiple area representing the isohyetal strips as output.
> 
> Thanks
> Daljeet
> 
> 
> Micha Silver wrote:
>> 
>> Hi Daljeet
>> 
>> 
>> daljeet wrote:
>> 
>>> Hi Micha,
>>>
>>> I could create isohyetal lines using the suggested steps:
>>>
>>>   
>> ... clipped...
>>>
>>> Following are the doubts/questions
>>>
>>> 1. I saw the details of the raster created from v.surf.rst
>>>
>>>   
>>>> r.info rainraster
>>>>     
>>>
>>> zmin_data=0.000000, zmax_data=141.322000                               
>>> |
>>> zmin_int=-13.588332, zmax_int=52.589905 
>>>
>>> zmin_data and zmax_data seems to be correct but I do not understand 
>>> a) why the interpolated value zmin_int=-13.588332 is -ve
>>> b) and what is meaning of zmax_int equal to  52.58990
>>>   
>> If I understand correctly, the zmax_int and zmin_int are the max and min 
>> displacements of the interpolated values vs. the actual data points. The 
>> RST method creates an interpolation which does not usually go thru the 
>> actual data points, but rather "smooths" over them. These numbers show 
>> the drift above and below actual data points. So you have one point 
>> where the interpolated rainfall is 13 mm (or whatever the rain units 
>> are) below the actual data, and one point where the interpolation is 52 
>> mm above.
>>> 2. The target is to be able to calculate the area between two isohyetal
>>> lines and multiplying that area with the average rainfall within the two
>>> isohyets. This is to be done for all isohyetal lines. 
>>>
>>> Average can be calculated by averaging the value of rainfall of the two
>>> isohyetal lines.
>>>
>>> But how to calculate the area b/w the two isohyetal lines?
>>>   
>> Well I can think of two approaches to this.
>> 1- Using vectors:  You might try to convert the isolines to closed 
>> boundaries, then add centroids and find some way to get the rainfall 
>> values into the centroids. This would require first to create an "edge" 
>> line all around the region (v.in.region will do this) to close the ends 
>> of the isolines,  then run v.clean with the "break" tool to get nodes 
>> where each contour line crosses this region line. Then you should be 
>> able to convert the lines to closed boundaries (v.type) and finally 
>> v.centroids to create centroids in each of the resulting strips between 
>> isohyetal lines.
>> 
>> But this procedure looks way to convoluted to me. Instead maybe you 
>> could try:
>> 2- Using rasters:  You already have the rainfall raster. Perhaps create 
>> a reclass raster map of the rainfall raster using discrete values 
>> instead of the continuous range. So your reclass rules would look 
>> something like:
>> 0 thru 20 = 10
>> 21 thru 40 = 30
>> 41 thru 60 = 50
>> ...
>> This will group together all values in the interval between 0-20 and 
>> give them the value midway between, etc. Then you could do r.to.vect 
>> fea=area to create a vector map, and finally v.db.addtable and v.to.db 
>> to get the areas of each strip into the vector attribute table. (Note 
>> that r.reclass requires an integer raster)
>> 
>> After that long-winded response, I should add one more comment: Rainfall 
>> is not a continuous phenomena across a geographic area. There's no 
>> reason to expect that between the 40 mm line and the 60 mm line the 
>> average rainfall is 50 mm. If you stay with the original, continuous 
>> rainfall raster, and use v.rast.stats then the statistics are totalled 
>> on a cell by cell basis, and you avoid the "unnatural" results that 
>> might pop up when forcing the data into a framework of arbitrary
>> intervals.
>> 
>> Regards,
>> Micha
>>>   
>> 
>> _______________________________________________
>> grass-user mailing list
>> grass-user at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-user
>> 
>> 
> 
> 

-- 
View this message in context: http://n2.nabble.com/how-to-calculate-area-of-voronoi-polygons-considering-the-boundary-of-the-catchment-tp3335923p3579353.html
Sent from the Grass - Users mailing list archive at Nabble.com.


More information about the grass-user mailing list