NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

20000811: Simple way to plot a Number?

>From: John F Moses <jfmoses@xxxxxxxxxxxxxxxxxxxx>
>Organization: Computer Sciences Corp.
>Keywords: 200008112003.e7BK3tN11187

Hi John-

>i'm trying to simple way to plot a real number at a given lat, lon location
>in the display.  i've look at the text plot example, but can't find my way
>through the data types.  can someone help me by pointing to an example, or
>code snipet?

Basically, you need to map the MathType of your Real or Text object
to Display.Text.

If you have a RealTuple like (lat, lon, altitude) where the MathTypes
of each are RealType.Latitude, RealType.Longitude, RealType.Altitude,
you could just map lat->Display.YAxis, lon->Display.XAxis and 
altitude->Display.Text, add the tuple to your datareference and the
value for altitude should plot at the lat/lon point in your display.

I've attached a file TextPlot.java which will plot a station elevation
at a given lat/lon point. If you pass an arguement to the command line
(any old argument will do), it will plot the station name instead. This
uses NamedLocationTuple in visad.georef which is a tuple of (name, lat,
lon, alt) and is useful for encapsulating a station location.

>being stuck on a friday afternoon, any help would be much appriciated,

My first advice would be to quit and go drink beer, but try out
TextPlot instead as a second option.

Don
*************************************************************
Don Murray                               UCAR Unidata Program
dmurray@xxxxxxxxxxxxxxxx                        P.O. Box 3000
(303) 497-8628                              Boulder, CO 80307
*************************************************************
Unidata WWW Server               http://www.unidata.ucar.edu/
McIDAS Demonstration Machine  http://mcdemo.unidata.ucar.edu/
*************************************************************
import visad.*;
import visad.georef.*;
import visad.java3d.*;
import visad.data.mcidas.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URL;

public class TextPlot
{
    public static void main(String[] args)
        throws Exception
    {
        DisplayImpl display = 
            new DisplayImplJ3D("Station Name Plots", 
                new TwoDDisplayRendererJ3D());
        // turn the box off so it won't be confused with the map lines
        display.getDisplayRenderer().setBoxOn(false);  

        // create the stations
        NamedLocationTuple point1 = 
            new NamedLocationTuple("Denver", 39.8, -104.6, 1656);
        NamedLocationTuple point2 = 
            new NamedLocationTuple("Pueblo", 38.3, -104.5, 1439);
        NamedLocationTuple point3 = 
            new NamedLocationTuple("Grand Junction", 39.2, -108.5, 1439);

        // create the ScalarMaps (lat-Y, lon-X, alt/name -> text)
        ScalarMap latMap = new ScalarMap(RealType.Latitude, Display.YAxis);
        display.addMap(latMap);
        ScalarMap lonMap = new ScalarMap(RealType.Longitude, Display.XAxis);
        display.addMap(lonMap);
        // zoom in over colorado
        latMap.setRange(37, 42);
        lonMap.setRange(-109, -104);
        // set up the mapping to text - use Altitude if no args, otherwise name
        ScalarMap textMap;
        if (args.length == 0)
        {
            textMap = new ScalarMap(RealType.Altitude, Display.Text);
        }
        else
        {
            textMap = 
                new ScalarMap(NamedLocationTuple.IDENTIFIER_TYPE, Display.Text);
        }
        display.addMap(textMap);

        // set some attributes of the displayed text
        TextControl textControl = (TextControl) textMap.getControl();
        textControl.setSize(1.5);       // set the text size
        textControl.setCenter(true);    // center on the LatLonPoint
        textControl.setFont(new Font("SansSerif", Font.PLAIN, 18));

        // Create a station table with one record for each station
        RealType record = new RealType("record");  // Domain type
        FunctionType tableType
            new FunctionType(record, point1.getType());  
        Integer1DSet recordSet = 
            new Integer1DSet(record, 3); // domain the size of the # of stations
        FieldImpl stationTable = 
            new FieldImpl(tableType, recordSet);  //make the table
        // set the stations in the table
        stationTable.setSample(0, point1);
        stationTable.setSample(1, point2);
        stationTable.setSample(2, point3);

        // add the stations to the display
        DataReference tableRef = new DataReferenceImpl("stations");
        tableRef.setData(stationTable);
        display.addReference(tableRef);

        // add a map
        DataReference mapRef = new DataReferenceImpl("maplines");
        try
        {
            BaseMapAdapter bma = 
                new BaseMapAdapter(
                    new URL("ftp://www.ssec.wisc.edu/pub/visad-2.0/OUTLUSAM";));
            mapRef.setData(bma.getData());
            display.addReference(mapRef);
        }
        catch (Exception exp) {}  // don't add to display if we can't get map

        // something to display it with
        JFrame frame = new JFrame("Text Display");
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e)
            { System.exit(0); }
        });

        frame.getContentPane().add(display.getComponent());
        frame.pack();
        frame.setSize(400,400);
        frame.show();
    }
}


  • 2000 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: