[FWTools] contours as polygons

David Fawcett david.fawcett at gmail.com
Thu Nov 10 12:04:21 EST 2005


I remembered this interesting post from the MapServer list back in July. I
believe that they still ended up with lines and not polys, but their methods
may inspire a creative solution...

_________________

*Date:*         Fri, 22 Jul 2005 22:05:54 -0800
*Reply-To:*     Rob Cermak <cermak at SFOS.UAF.EDU>
*Sender:*       UMN MapServer Users List <MAPSERVER-USERS at LISTS.UMN.EDU>
*From:*         Rob Cermak <cermak at SFOS.UAF.EDU>
*Subject:*      MapHack for (Weather) data : Contouring (on-the-fly)
*Content-Type:* TEXT/PLAIN; charset=US-ASCII


Just happened to stumble on this quite by accident.  We have been looking
for a way to dynamically contour data for quite some time.   Googling
surfaces a lot of people attempting various means.  Mapping Hacks shows
how it can be done using GRASS.

Most OOS (Ocean Observing System) mapserver sites can plot data rather
easily...color filled circles for sea surface temperature... here is
something to help you go the next step.  I present a bare bones method to
preparing data for contouring any data you've got.  Making it dynamic is
left as an exercise for the reader.

TOOLS:
 Data (Longitude, Latitude, Value[Z])
 GMT (http://gmt.soest.hawaii.edu/)
  - compiled with NetCDF
  - blockmean
  - surface
  - Unix util: awk
 gdal_contour (from GDAL 1.2.5)
  - must have: GMT (rw): GMT NetCDF Grid Format (as seen by --formats)

Step 1: Get your data -- many many ways to do this.  In this example, we
have long, lat, and sea level pressure(Z).  The Z values can be anything.

170.000000,50.000000,1026.400000
170.500000,50.000000,1026.320000
171.000000,50.000000,1026.210000
171.500000,50.000000,1026.080000
172.000000,50.000000,1025.910000
172.500000,50.000000,1025.720000
173.000000,50.000000,1025.510000
173.500000,50.000000,1025.260000
174.000000,50.000000,1025.000000
174.500000,50.000000,1024.710000
[..snip..]

Step 2: Use GMT to convert the data to a GMT NetCDF gridded file

# You will need to set the GRID REGION up properly for your use...
GRID_REGION="-180/180/30/80";
# blockmean option -I put all our nice data into 0.5 degree bins for
# the surface program
awk -F, '{if ($3>0) printf "%f %f %f\n",$1,$2,$3}' ak.psl | blockmean
-R$GRID_REGION -I0.5 > ak.grd
# Take output from blockmean and grid it into a 1/2 by 1/2 degree grid and
# stuff info a GMT (netcdf) grid file
surface ak.grd -R$GRID_REGION -I0.5 -Gak2.grd

The normal next step is to plot it up using a GMT tool that produces
postscript!  Ick!

Step 3: Abuse of GDAL - gdal_contour

Gdal is really for operating on raster data, but with the GMT Netcdf Grid
driver, we can abuse it.  Taking our above data, treat it like a raster or
heights from a DEM.  Now convert from GMT grid to shapefile.

gdal_contour -a elev ak2.grd ak2s.shp -i 1.0

>From the shape file, you can import into PostGIS or go right to the
display in mapserver.

  layer
    GROUP slp
    NAME something
    DEBUG ON
    DATA ak2s
    TYPE LINE
    STATUS ON
    class
      color 200 200 0
    end
  end

  layer
    GROUP slp
    NAME label_slp
    DATA ak2s
    LABELITEM elev
    TYPE ANNOTATION
    CLASS
      LABEL
        POSITION CC
        SIZE TINY
        COLOR 0 0 0
      END
    END
  end

So, that is the basic hack.  To do:

* allow the user to control the contour interval, color, ...
  - allow variation of contours - dashed lines?
* control annotation the values 1004 vs 1004.000 (cleanup through PostGIS)
* properly identify the values -- its not just heights anymore...

Now you can contour any parameter you want:  sea level pressure, heights,
temperature, ....  or about anything gridded in the oceanographic
/meteorologic world.  For all the weather winnies of the world...

Sample image: Sea level pressure map as produced from NCEP's
  Global Forecast System on a 1/2 deg x 1/2 deg grid.
  http://ak.aoos.org/mapserver/aoos/slp.png

If there is an easier way, please send it my way.

Happy Maphacking!
Rob
--
Rob Cermak : 907-474-7948 : FAX 907-474-7204 : PGP = 0x75869A6E
Alaska Ocean Observing System : Data Management
School of Fisheries and Ocean Sciences : University of Alaska Fairbanks
cermak at sfos.uaf.edu : fnjrc1 at uaf.edu
ED9U1M7P01 at alaska.edu : cermak at alaska.edu



On 11/10/05, Frank Warmerdam <warmerdam at pobox.com> wrote:
>
> On 11/10/05, Bryan Keith <bryan at geomega.com> wrote:
> > I use gdal_contour to create contours as lines. Does anyone know of a
> > similar tool or have some code that will create polygons instead of
> > lines when contouring a surface? Each polygon would represent the area
> > between n1 and n2. I have the ConRec code and thought about writing
> > this myself, but it gets complicated with donut polygons. I bet
> > someone's done this before. Maybe there's a better mailing list for
> > this question? Thanks.
>
> Bryan,
>
> An interesting problem, but I don't know the answer. It seems
> like you should be able to use the contours, along with introduced
> edged lines and feed it into a topological analyser to build
> polygons. You might want to look at GRASS to do this.
>
> You might want to try the gislist, or freegis mailing list. Even
> gdal-dev might be worth a try.
>
> Best regards,
> --
>
> ---------------------------------------+--------------------------------------
> I set the clouds in motion - turn up | Frank Warmerdam,
> warmerdam at pobox.com
> light and sound - activate the windows | http://pobox.com/~warmerdam
> and watch the world go round - Rush | Geospatial Programmer for Rent
>
> _______________________________________________
> FWTools mailing list
> FWTools at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/fwtools
> http://fwtools.maptools.org/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.maptools.org/pipermail/fwtools/attachments/20051110/9a6abe5f/attachment.html


More information about the FWTools mailing list