[mapserver-commits] r12830 - trunk/docs/en/development/rfc

svn at osgeo.org svn at osgeo.org
Wed Nov 30 10:52:03 EST 2011


Author: tbonfort
Date: 2011-11-30 07:52:02 -0800 (Wed, 30 Nov 2011)
New Revision: 12830

Added:
   trunk/docs/en/development/rfc/ms-rfc-79.txt
Log:
aquiring rfc79 slot


Copied: trunk/docs/en/development/rfc/ms-rfc-79.txt (from rev 12829, trunk/docs/en/development/rfc/ms-rfc-78.txt)
===================================================================
--- trunk/docs/en/development/rfc/ms-rfc-79.txt	                        (rev 0)
+++ trunk/docs/en/development/rfc/ms-rfc-79.txt	2011-11-30 15:52:02 UTC (rev 12830)
@@ -0,0 +1,152 @@
+.. _rfc78:
+
+=========================================================================
+MS RFC 78: Vector Field Rendering (CONNECTIONTYPE UVRASTER)
+=========================================================================
+
+:Date:  2011/11/04
+:Author: Alan Boudreault
+:Contact: aboudreault at mapgears.com
+:Last Edited: $Date$
+:Status: Draft
+:Version: MapServer 6.2
+:Id: $Id$
+
+1. Overview
+-----------
+
+This is a proposal to add the ability to render vector field layers in
+MapServer. Vector fields are used for instance in meteorology to
+store/display wind direction and magnitude.
+
+The source is two bands of raster data, one band represents the U
+component of the vector, and the 2nd band the V component. Using the u,v
+values at a given location we can compute a rotation and magnitude and use
+that to draw an arrow of a size proportional to the magnitude and pointing
+in the direction of the phenomenon (wind, current, etc.)
+
+For more details about vector fields, refer to: http://en.wikipedia.org/wiki/Vector_field 
+
+Visual example (rendered with MapServer):
+
+ .. image:: ../../images/uv.png
+
+2. The proposed solution
+------------------------
+
+This RFC proposes the addition of a new type of layer in MapServer: 
+CONNECTIONTYPE UVRASTER.
+The new type is a hybrid layer, which has a raster data source as input and
+vector features as output. Initially, only the point representation of those 
+vector features will be supported. Also, queries won't be supported in this
+phase. 
+
+Since the data source is a raster, all raster processing options can be
+used (e.g. RESAMPLE). After a few tests, we determined that the best results
+(for all different zoom levels) for vector fields were when using
+RESAMPLE=AVERAGE and this will be set by default for UV layers unless another
+type of resampling is explicitly specified in the layer definition.
+
+To render a vector field layer, we need to define a layer in the mapfile
+with the following options:
+
+ * Set the layer TYPE to POINT.
+ * Set CONNECTIONTYPE to UVRASTER.
+ * Set the DATA to the raster file that contains u/v bands.
+ * Specify the 2 bands to use as u and v.
+ * Specify a class to render the point features.
+
+Optional "PROCESSING" settings:
+
+ * UV_SPACING: The spacing is simply the distance, in pixels, between arrows
+   to be displayed in the vector field. Default is 32.  
+ * UV_SIZE_SCALE: The uv size scale is used to convert the vector
+   lengths (magnitude) of the raster to pixels for a better rendering. Default
+   is 1. 
+
+The UVRASTER layer has 4 attribute bindings that can be used in the layer 
+definition and/or class expressions:
+
+ * [u]: the raw u value
+ * [v]: the raw v value
+ * [uv_angle]: the vector angle
+ * [uv_length]: the vector length (scaled with the UV_SIZE_SCALE option value)
+
+Example of a layer definition:
+
+::
+
+  LAYER
+   NAME "my_uv_layer"
+   TYPE POINT
+   STATUS DEFAULT
+   CONNECTIONTYPE UVRASTER
+   DATA /mnt/data/raster/grib/wind.grib2
+   PROCESSING "BANDS=1,2"
+   PROCESSING "UV_SPACING=40"
+   PROCESSING "UV_SIZE_SCALE=0.2"
+   CLASS
+    STYLE
+    ANGLE [uv_angle]
+    SYMBOL "arrow"
+    SIZE [uv_length]
+    COLOR 255 0 0
+    POSITION CC
+    MINSIZE 5
+   END
+  END
+
+  
+
+3. Implementation Details
+-------------------------
+
+Internally, a UVRASTER layer will have its own renderer/driver code. It's a
+hybrid layer because it reads the raster source as a normal raster
+layer does, but all other functions behave like a vector layer. The
+layer can be drawn as a normal point layer using whichShape, GetShape
+etc.
+
+Basic internal draw process of a UVRASTER layer:
+
+ 1. whichShape() is called: the raster data source is read using the
+    internal GDAL functions, resample and all other raster options are applied
+    and the u,v pixels result is stored in the internal layer structure.
+
+ 2. getShape() is called: loop through the raster pixels and returns a
+    shapeObj (Point) created with the pixel location.
+
+ 3. MapServer draws its point feature as any other vector layer.
+
+3.1 Files affected
+------------------
+
+The following files will be modified/created by this RFC:
+
+::
+
+  mapserver.h/mapfile.c (Connection type UVRASTER support in the mapfile)
+  mapuvraster.c (new file for the UVRASTER renderer)
+  maplayer.c (new layer type handling, virtual tables init etc.)
+  maplexer.l (add additional UVRASTER keyword)
+
+3.2 MapScript
+-------------
+
+No issue for any MapScript bindings. The UVRASTER layer is handled/rendered internally as
+any other layer..
+
+3.4 Backwards Compatibilty Issues
+---------------------------------
+
+This change provides a new functionality with no backwards compatibility issues being considered.
+
+4. Bug ID
+---------
+
+ * http://trac.osgeo.org/mapserver/ticket/4094
+
+5. Voting history
+-----------------
+
++1 from Jeff, Olivier, Assefa, Perry, FrankW, Daniel, Stephen, Michael, Thomas, Tom and Steve.



More information about the mapserver-commits mailing list