Vector field rendering - UVraster

Added in MapServer 6.2, Vector fields are used for instance in meteorology to store/display wind direction and magnitude.

The source is two bands of raster data, the first band represents the U component of the vector, and the second 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: Vector field

Visual example (rendered with MapServer):

../../_images/uv.png

LAYER Description

A vector field LAYER is a hybrid layer, which has a raster data source as input and vector features as output. The output features are represented as points. Queries are not supported.

Since the data source is a raster, all raster processing options can be used (e.g. RESAMPLE). RESAMPLE=AVERAGE generally gives a good result, and the default. This can be overridden by explicitly specifying the type of resampling.

Vector field layers are of TYPE point, and have CONNECTIONTYPE uvraster. The raster data set is specified in DATA. The two bands that define the vector field are specified using PROCESSING BANDS (U first, V second).

LAYER Attributes

The UVraster connection type offers the following attributes:

  • [u]: the raw u value

  • [v]: the raw v value

  • [uv_angle]: the vector angle

  • [uv_minus_angle]: the vector angle - opposite direction

  • [uv_length]: the vector length (scaled with the UV_SIZE_SCALE optional value)

  • [uv_length_2]: half the vector length

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.

Example of a layer definition

SYMBOL
  NAME "horizline"
  TYPE VECTOR
  POINTS
     0 0
     1 0
  END # points
END # symbol
SYMBOL
  NAME "arrowhead"
  TYPE vector
  FILLED true
  #ANCHORPOINT 0 0.5
  POINTS
    0 2
    4 1
    0 0
  END # points
END # symbol
SYMBOL
  NAME "arrowtail"
  TYPE vector
  FILLED true
  ANCHORPOINT 1 0.5 # to shift the arrowtail
  POINTS
    0 2
    4 1
    0 0
    -99 -99
    0 1
    4 1
  END # points
END # symbol
LAYER
  NAME "my_uv_test"
  TYPE POINT
  STATUS DEFAULT
  CONNECTIONTYPE uvraster
  DATA /path/wind.grib2
  PROCESSING "BANDS=1,2"
  PROCESSING "UV_SPACING=40"
  PROCESSING "UV_SIZE_SCALE=0.2"
  CLASS
    STYLE
      SYMBOL "horizline"
      ANGLE [uv_angle]
      SIZE [uv_length]
      WIDTH 3
      COLOR 100 255 0
    END # style
    STYLE
      SYMBOL "arrowhead"
      ANGLE [uv_angle]
      SIZE 10
      COLOR 255 0 0
      POLAROFFSET [uv_length_2] [uv_angle]
    END # style
    STYLE
      SYMBOL "arrowtail"
      ANGLE [uv_angle]
      SIZE 10
      COLOR 255 0 0
      POLAROFFSET [uv_length_2] [uv_minus_angle]
    END # style
  END # class
END # layer