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