shifting a unionSet or DataReferenceImpl

ncubukcu ncubukcu at nc.rr.com
Wed Aug 23 11:34:52 MDT 2006


Hi Bill
I thought about your suggestion below but I   couldn't proceed without 
any example. So if you  have an example please send me a snippet. Most 
of the field variables associated with unionSet are package protected so 
it's not simple to play with ranges. I shifted my data for now untill I 
figure out some other way. 

Also I post part of my code below.. Please all  send me any 
comment/suggestions you might have..  This code display precipitation 
data covering  North America but it has a global base map to goes with 
it. As you see in the code, I use BufferedImage.subimage method to get 
North America out of global image. Why do I do this? ..because given a 
global base map, I couldn't get a sub region using available methods of 
BaseMapAdapter or ShapefileAdapter classes. With 4 months of visad 
exploration this is all I have :-)
thanks
nihat

//setting tuple properties
CoordinateSystem cs = 
RealTupleType.LatitudeLongitudeTuple.getCoordinateSystem();
 latitude = RealType.getRealType(yLabel);
 longitude = RealType.getRealType(xLabel);
 RealTupleType domainTuple = new 
RealTupleType(RealType.Longitude,RealType.Latitude,cs,null);

//domainSet is created for the data to be displayed. latlon holds 
lat/lon of data grids
 visad.Set domainSet = new 
Gridded2DSet((RealTupleType)domainTuple,latlon,nlon,nlat);

 FunctionType contourFunction = new FunctionType(domainTuple,contourField);
 FunctionType shadedFunction = new FunctionType(domainTuple,shadedField);

 FlatField contourFlatField = new FlatField(contourFunction,domainSet);
 contourFlatField.setSamples(dataField);

 FlatField shadedFlatField = new FlatField(shadedFunction,domainSet);
 shadedFlatField.setSamples(contourFlatField.getFloats(false));

//use either a shapefile or a McIDAS file for map..
//ShapefileAdapter bma = new 
ShapefileAdapter("/xstor1/ShapeFiles/World/world.shp");
//ShapefileAdapter bma = new 
ShapefileAdapter("/xstor1/ShapeFiles/World/admin98/admin98.shp");
  BaseMapAdapter bma =  new BaseMapAdapter("/home/fcst/mcidas/OUTLSUPW");

 // Create the ScalarMaps: column to XAxis, row to YAxis and pixel to RGB
 // Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar)
 pixMap = new ScalarMap( shadedField,  Display.RGB );
 contMap = new ScalarMap( contourField, Display.IsoContour );
 colMap = new ScalarMap( longitude, Display.XAxis);
 rowMap = new ScalarMap( latitude,  Display.YAxis);

 //Add scalar maps to display
 display.addMap( colMap );
 display.addMap( rowMap );
 display.addMap( contMap );
 display.addMap( pixMap );

 // The ContourControl
 // Note that we get the control from the IsoContour map
 ContourControl isoControl = (ContourControl) contMap.getControl();
    if(base != -99 || highValue != -999 || lowValue != -999 || interval 
!= -999){
    // ...and set the lines with the method
    isoControl.setContourInterval(interval, lowValue, highValue, base);
    }
 isoControl.enableLabels(true);
 isoControl.setLabelSize(4.0);

 // Create a data reference and set the FlatField as our data
 DataReferenceImpl contourDataRef = new DataReferenceImpl("contour");
 DataReferenceImpl shadedDataRef = new DataReferenceImpl("shaded");
 DataReferenceImpl atlasDataRef = new DataReferenceImpl("map");

 shadedDataRef.setData(shadedFlatField );
 contourDataRef.setData(contourFlatField);
 UnionSet bma1= bma.getData();
 atlasDataRef.setData(bma1);

 // Add references to display
 display.addReference(atlasDataRef);
 display.addReference(shadedDataRef);
 display.addReference(contourDataRef);

//Set the aspect ratio.. xSize ySize are the display window dimensions. 
magFactor =3 seem to cover entire display area
 ProjectionControlJ2D projectionControl = 
(ProjectionControlJ2D)display.getProjectionControl();
 double xRange =magFactor*(double) ((double)xSize/Math.max(xSize,ySize));
 double yRange= magFactor*(double) ((double)ySize/Math.max(xSize,ySize));
 projectionControl.setAspect(new double[] {xRange,yRange});

//these vars get  me the sub region I want out of a global image. The 
numbers 20 and 60 are there to get some padding around the image
// this works only if I use magFactor =3 and the basemap is global. 
Otherwise get the entire image
 int xx1 = (int)(xlow*(xSize/2)+xSize/2);
 int xx2 = (int)(xhigh*(xSize/2)+xSize/2)+20;
 int yy1 = ySize-(int)(ylow*(ySize/2)+ySize/2);
 int yy2 = ySize-(int)(yhigh*(ySize/2)+ySize/2)-60;
//finally get subimage
BufferedImage dd = 
display.getImage(true).getSubimage(xx1,yy2,(xx2-xx1),(yy1-yy2));

Bill Hibbard wrote:
> Hi Nihat,
>
> Someone else may come up with an easier answer, but
> I'd write a method to essentially clone the UnionSet
> except for the numerical adjustment to longitude
> values. In the time it would take to dream up
> something clever, you could write this little method
> (assuming the Sets in your UnionSet are all of the
> same class).
>
> Good luck,
> Bill
>
> On Mon, 21 Aug 2006, ncubukcu wrote:
>
>   
>> Hi
>> What is the easiest way to shift a base map? I read in a shapefile which
>> takes 180deg longitude as starting point whereas all my data starts from
>> 0deg longitude. So I need to shift either my data fields or the base
>> map. (I would prefer the basemap) This is what I get otherwise: Thanks a
>> lot in advance...
>> nihat
>>     
>
>
>   

==============================================================================
To unsubscribe visad, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
==============================================================================



More information about the visad mailing list