Re: Displaying wind barbs correctly

Hi James,

I believe you should always call setRange(-1.0, 1.0)
for ScalarMaps to Cartesian flow components. I think
the reason for your problem is that it is assuming
meters/second for your u and v values (null unit),
but the units for barbs are knots. It may work better
if you explicitly define knots as the default units
for u and v. But let us know if there is still a
problem.

Cheers,
Bill

On Fri, 25 Feb 2005, James Kelly wrote:

> Hi All,
>
> Lets say I've got data of MathType ((lat,lon)->(u,v)) and I want to
> display this using wind barbs (where u = x component of wind and v = y
> component).
>
> To do this, I create scalar maps of u mapped to Flow1X and v to Flow1Y.
> I then need to call "setRange" on these scalar maps eg:
> uMap.setRange(-3.0, 3.0);
> vMap.setRange(-3.0, 3.0);
>
> If I don't do this, then the windbarbs display as "calm" (0 knots).
> If I choose -3 to 3, then it displays correctly (5 knots in the example
> below).
> If I choose other numbers (eg -1 to 1) then the wind barb displays
> incorrectly (10 knots in the example below).
>
> Can anyone explain why?
>
> Thanks,
>
> James
>
> Above problem is illustrated by the jython code (and data file) below,
> which incorrectly displays a 5 knot wind as 10 knot wind barbs:
>
> from visad.python.JPythonMethods import *
> from visad import RealType, Real, FunctionType, FlatField, RealTuple,
> ScalarMap, Display
> from visad.data.text import TextAdapter
> from visad.bom import BarbRendererJ3D
>
> import subs, graph, sys
>
> width = 800
> height = 600
>
> textAdapter = TextAdapter("uv.txt")
>
> data = textAdapter.getData()
> print data
>
> uType = RealType.getRealType("U")
> vType = RealType.getRealType("V")
>
> latitudeType = RealType.Latitude
> longitudeType = RealType.Longitude
>
> xMap = ScalarMap(longitudeType, Display.XAxis)
> yMap = ScalarMap(latitudeType, Display.YAxis)
> uMap = ScalarMap(uType, Display.Flow1X)
> vMap = ScalarMap(vType, Display.Flow1Y)
>
> dataRenderer = BarbRendererJ3D()
>
> maps = (xMap, yMap, uMap, vMap)
> disp = subs.makeDisplay(maps)
>
> uMap.setRange(-1.0, 1.0);
> vMap.setRange(-1.0, 1.0);
> flowU_control = uMap.getControl()
> flowV_control = vMap.getControl()
> flowU_control.setFlowScale(0.1)
> flowV_control.setFlowScale(0.1)
>
> dr=subs.addData("test_uv", data, disp, None, dataRenderer, None)
>
> subs.setBoxSize(disp, .80)
> subs.setAspectRatio(disp, float(width)/float(height))
> subs.showDisplay(disp,width,height,"Test UV")
>
> uv.txt contains the following:
>
> (Longitude, Latitude) -> (U, V)
> Latitude, Longitude, U, V
> -12.4, 131.8, 5.0, 5.0
> -16.9, 133.7, 5.0, 5.0
> -14.4, 134.8, 5.0, 5.0
> -15.4, 135.8, 5.0, 5.0
>
> --
> James Kelly
> Meteorological Systems Section                    Bureau of Meteorology
> PO Box 1289K                                  Melbourne 3001, Australia
>
>
>