[GRASS-user] r.contour fails to close a contour at the region's border

Markus Metz markus.metz.giswork at gmail.com
Thu Jan 9 00:57:20 PST 2014


On Thu, Jan 9, 2014 at 1:46 AM, John Ciolek <jciolek at alphatrac.com> wrote:
>
> On Jan 8, 2014, at 12:35 PM, Markus Metz wrote:
>
>> On Thu, Dec 12, 2013 at 11:13 PM, John Ciolek <jciolek at alphatrac.com> wrote:
>>> I have automatically generated raster data from which I create a contour
>>> using r.contour.  Sometimes the "feature" to be contoured is not completely
>>> contained within the specified region.  When this happens, r.contour
>>> generates an open contour - basically the beginning line segment point does
>>> not equal the ending line segment point.
>>>
>>> Is there a way to get r.contour to close the contour at the region's border?
>>
>> No. This is a feature of r.contour because it is impossible to tell
>> where a contour would continue if it hits the region's border.
>>>
>>> If not, is there an easy way to close the contour?
>>
>> Why do you want to close the contour?
>
> I am trying to create areas from the contours, where the areas clip to the set region.
>
>>
>> If you want to convert the contour lines to areas, you might instead
>> modify the raster with r.mapcalc, e.g. for contours at every 100 unit
>> step
>>
>> r.mapcalc "surface.classified = int(surface / 100) * 100"
>>
>> but here a value of 99 would be converted to 0, thus as an alternative
>>
>> r.mapcalc "surface.classified = int((surface + 50) / 100) * 100"
>>
>> which would convert e.g. all values >= 50 and < 150 to 100.
>>
>> After that the classified raster could be converted to vector areas
>> with r.to.vect type=area
>>
>> HTH,
>>
>> Markus M
>
>
> Wouldn't this create a very blocky contour?

The contours are as blocky as the current region settings, also with
r.contour. If you first classify the raster, then convert it to a
vector, you can use r.to.vect with the -s flag which creates smoothed
lines and boundaries. Then there is v.generalize for further
smoothing.

>
> The contouring is done in batch mode for a real-time modeling system.  Right now I'm thinking it would be easiest to write a program to add one extra point to the vector if the first and last points do not match.  Was hoping for an easier way.

r.contour itself is slow, the r.mapcalc + r.to.vect approach could be faster.

Markus M

>
> John
>
>
>


More information about the grass-user mailing list