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
==============================================================================