Hi All
??? ??? I'd would like to thank everyone who took the time to reply to my email your ideas helped alot . I figure out the problem with the geotiff ??? ??? file not having the proper projection
which i would like to share with everyone how it was fixed. I came
across? "gdalwarp" library which did the trick of changing to lat/lon
projection EPSG:4326 as follow "gdalwarp -t_srs EPSG:4326 in.tif
out.tif" .
Hope that would help.
Thanks
Mike
-----Original Message-----
From: Ta3ban4_at_aol.com
To: openmap-users_at_bbn.com
Sent: Tue, 22 Apr 2008 3:45 pm
Subject: [OpenMap Users] GeoTiff how to ??
Hi All, I'm newbie with openmap API . I trying to display geotiff files and
i did find the following class JAIPlugIn shown below from?openmap?
mailing list Archive?. Unfortunately I couldn't get it to?display the
geotiff file .? Any help would be really appreciated.
?
Thanks
Mike?
?
the following is how i was setting it up
?
Properties jaiProps = new
Properties();
jaiProps.put("jailayer.prettyName",
repro.getProperty("jailayer.prettyName"));
jaiProps.put("jailayer.imageFile",
repro.getProperty("jailayer.imageFile"));
?jai.setProperties("jailayer",
jaiProps);
PlugInLayer pl = new
PlugInLayer();
pl.setPlugIn(jai);
pl.setVisible(true);
layerHandler.addLayer(pl);
?
//*********************************************///
import java.awt.Component;
import java.io.BufferedReader;
import
java.io.FileNotFoundException;
import java.io.FileReader;
import
java.io.IOException;
import java.util.Properties;
?
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
?
import com.bbn.openmap.LatLonPoint;
import
com.bbn.openmap.omGraphics.OMGraphicList;
import
com.bbn.openmap.omGraphics.OMScalingRaster;
import
com.bbn.openmap.plugin.OMGraphicHandlerPlugIn;
import
com.bbn.openmap.proj.Projection;
import
com.bbn.openmap.proj.coords.DMSLatLonPoint;
import
com.bbn.openmap.util.Debug;
import com.bbn.openmap.util.PropUtils;
?
import com.sun.media.jai.codec.FileSeekableStream;
import
com.sun.media.jai.codec.TIFFDirectory;
import
com.sun.media.jai.codec.TIFFField;
/**
?*
?* _at_author
mahmoudm
?*/
public class JAIPlugIn extends OMGraphicHandlerPlugIn
{
?
??? double lat, lon, lat2, lon2, ximage_scale,
yimage_scale;
?
??? // sourcelat,sourcelon;
?
??? protected PlanarImage source = null;
?
??? boolean DEBUG = true;
?
??? /** The property for the data file - tileFile.
*/
??? public final static String FileNameProperty =
"imageFile";
?
??? /**
???? * The property for
whether the data file has a descriptive
header
??????? on
the
???? * first line, to let the reader know to ignore
that line -
???????
fileHasHeader.
???? * Default is
true.
???? */
?
??? protected String imageFileName = null;
?
??? // the map
??? OMScalingRaster raster
= null;
?
??? /**
???? * Default
constructor.
???? */
??? public
JAIPlugIn()
???
{
???????
super();
??????? DEBUG =
Debug.debugging("JAIPlugIn");
??? }
?
??? public JAIPlugIn(Component comp)
???
{
???????
super(comp);
??? }
?
??? /**
???? * The getRectangle call
is the main call into the PlugIn module.
???? * The
module
???? * is expected to fill the graphics list with
objects that are
???? * within
the
???? * screen parameters
passed.
???? *
???? * _at_param
p
???? * projection of the screen, holding scale, center
coords,
???? * height, width.
????
*/
??? public OMGraphicList getRectangle(Projection p)
??? {
?
??????? OMGraphicList list =
(OMGraphicList) getList();
???????
list.clear();
?
??????? if (DEBUG)
???????
{
???????????
Debug.output("CSVTIPI:
getRectangle");
??????? }
?
??????? if (raster == null)
???????
{
???????????
loadRaster(imageFileName);
??????? }
?
??????? if (raster.isOnMap(p))
???????
{
??????????? if
(DEBUG)
{
???????????????
Debug.output("CSVTIPI: image on
map");
???????????
}
???????????
raster.generate(p);
???????????
list.add(raster);
???????
}
??????? else if (DEBUG)
???????
{
???????????
Debug.output("CSVTIPI: image not on map,
skipping");
??????? }
?
???????
repaint();
??????? return list;
?
??? } // end getRectangle
?
??? /**
???? * PropertyConsumer
method, setting the PlugIn with properties that
???? *
apply to
???? * it.
????
*/
??? public void setProperties(String prefix, Properties
props)
??? {
???????
super.setProperties(prefix, props);
?
??????? String realPrefix =
PropUtils.getScopedPropertyPrefix(prefix);
?
??????? imageFileName =
props.getProperty(realPrefix + FileNameProperty);
?
??????? if (DEBUG)
???????
{
???????????
Debug.output("CSVTIPI: file: " +
imageFileName);
??????? }
?
??? }
?
??? /**
???? * Takes the URL to a csv
file and parses it into OMScaledRasters,
???? * adding
them to the tiles HashSet.
???? */
???
protected void loadRaster(String csvFileName)
???
{
??????? if (imageFileName != null)
???????
{
??????????? try
???????????
{
???????????????
init();
??????????? }
catch (FileNotFoundException e)
???????????
{
???????????????
//Debug.output("CSVTIPI: file: " + imageFileName + " not
found");
???????????????
e.printStackTrace();
???????????
}
??????????? //
OMScalingRaster
omsr
???????????
raster = new OMScalingRaster((float) lat, (float)
lon,
???????????????????
(float) lat2, (float)
lon2,
???????????
source.getAsBufferedImage());
???????
}
??? }
?
??? /**
???? * Method to fill in a
Properties object, reflecting the current
????
*?? values of
???? * the PropertyConsumer. If
the PropertyConsumer has a prefix set, the
???? *
property keys should have that prefix plus a separating
'.'
???? * prepended to
???? *
each propery key it uses for configuration.
????
*
???? * _at_param getList
???? * a
Properties object to load the PropertyConsumer
properties
???? * into. If getList equals null, then a
new Properties object
???? * should be
created.
???? * _at_return Properties object containing
PropertyConsumer property values. If
???? * getList was
not null, this should equal getList.Otherwise, it
???? *
should be the Properties object created by the
???? *
PropertyConsumer.
???? */
??? public
Properties getProperties(Properties getList)
{
??????? if (getList == null)
{
??????????? getList
= new Properties();
??????? }
?
??????? String prefix =
PropUtils.getScopedPropertyPrefix(this);
?
??????? getList.put(prefix +
FileNameProperty,
PropUtils.unnull(imageFileName));
?
??????? return
getList;
??? }
?
??? int sourceWidth;
?
??? int sourceHeigth;
?
??? public void init() throws FileNotFoundException
{
??????? try {
?
??????????? String
associatedfile =
imageFileName;
???????????
source = JAI.create("fileload", associatedfile);
?
???????????
sourceWidth =
source.getWidth();
???????????
sourceHeigth = source.getHeight();
?
??????????? double
xscale,
yscale;
???????????
double lonNW,
latNW;
???????????
String projfilename =
imageFileName;
???????????
FileSeekableStream st;
?
??????????? if
(imageFileName.endsWith(".tif")
???????????????????
|| imageFileName.endsWith(".TIF")) {
?
???????????????
st = new FileSeekableStream(imageFileName);
?
???????????????
TIFFDirectory
td;
???????????????
td = new TIFFDirectory(st, 0);
?
???????????????
TIFFField tfMPS = td.getField(33550); //
ModelPixelScaleTag
???????????????
TIFFField tfMTP = td.getField(33922); // ModelTiepointTag
?
???????????????
System.out.println("tfMPS " + tfMPS + "\ntfMTP " + tfMTP +"? -->
"+imageFileName);
?
???????????????
try
{
???????????????????
xscale =
tfMPS.getAsDouble(0);
???????????????????
yscale = tfMPS.getAsDouble(1);
?
???????????????????
double[] tiepoints = tfMTP.getAsDoubles();
?
???????????????????
System.out.println("count=" + tfMTP.getCount());
?
???????????????????
for (int i = 0; i < tiepoints.length; i++)
{
???????????????????????
System.out.println("-->" +
tiepoints[i]);
???????????????????
}
?
???????????????????
System.out.println("type=" +
tfMPS.getType());
???????????????????
System.out.println("type=" +
tfMTP.getType());
???????????????????
System.out.println("nb of tiepoints =
"
???????????????????????????
+ tfMTP.getAsDouble(0));
?
???????????????????
if (tfMTP.getCount() != 6 && tfMTP.getCount() != 4)
???????????????????
{
???????????????????????
System.out.println("warning tif file may pose
problems...");
???????????????????
}
?
???????????????????
if (tfMTP.getCount() == 6)
???????????????????
{
???????????????????????
lonNW =
tfMTP.getAsDouble(3);
???????????????????????
latNW =
tfMTP.getAsDouble(4);
???????????????????
}
???????????????????
else if (tfMTP.getCount() == 2)
???????????????????
{
???????????????????????
lonNW =
tfMTP.getAsDouble(0);
???????????????????????
latNW =
tfMTP.getAsDouble(1);
???????????????????
}
???????????????????
else
???????????????????
{
???????????????????????
lonNW =
tfMTP.getAsDouble(2);
???????????????????????
latNW =
tfMTP.getAsDouble(3);
???????????????????
}
?
???????????????????
DMSLatLonPoint upperLeft = new DMSLatLonPoint(new LatLonPoint(latNW,
lonNW));
???????????????????
DMSLatLonPoint lowerRight = new DMSLatLonPoint(new
LatLonPoint(latNW
???????????????????????????????????
- (yscale * (source.getHeight())),
lonNW
???????????????????????????????????
+ (xscale * (source.getWidth()))));
?
???????????????????
System.out.println("xscale " + xscale + " yscale "
+yscale
???????????????????????????
+ " lonNW " + lonNW + " latNW " +
latNW
???????????????????????????
+ " img height " +
source.getHeight()
???????????????????????????
+ " img width " + source.getWidth() + "
"
???????????????????????????
+ formatDMSPoint(upperLeft) + "
"
???????????????????????????
+
formatDMSPoint(lowerRight));
???????????????????
init((double) (latNW), (double)
(lonNW),
???????????????????????????
(double) (latNW - (yscale
*
(source.getHeight()))),
???????????????????????????
(double) (lonNW + (xscale
*
(source.getWidth()))),
???????????????????????????
(double) xscale, (double) yscale);
?
???????????????????
st.close();
???????????????
} catch (Exception e)
{
???????????????????
st.close();
???????????????????
System.out.println("Error reading geotiff" +
e);
???????????????????
e.printStackTrace();
???????????????????
System.out
???????????????????????????
.println("No Geotiff referencing found.Attempting projection file.");
?
???????????????????
if
(imageFileName.endsWith(".tif"))
???????????????????????
projfilename = imageFileName.replaceAll("\\.tif",
???????????????????????????????
".tfw");
?
???????????????????
setGeoReferencing(source,
projfilename);
???????????????
}
?
??????????? } else
{
?
???????????????
if
(imageFileName.endsWith(".bmp"))
???????????????????
projfilename = imageFileName.replaceAll("\\.bmp",
".bpw");
???????????????
else if
(imageFileName.endsWith(".BMP"))
???????????????????
projfilename = imageFileName.replaceAll("\\.BMP",
".BPW");
?
???????????????
else if
(imageFileName.endsWith(".JPG"))
???????????????????
projfilename = imageFileName.replaceAll("\\.JPG",
".JGW");
???????????????
else if
(imageFileName.endsWith(".jpg"))
???????????????????
projfilename = imageFileName.replaceAll("\\.jpg",
".jgw");
?
???????????????
setGeoReferencing(source,
projfilename);
???????????
}
??????? } catch (IOException e)
{
???????????
System.out.println("OMJAIScalingRaster...");
???????????
System.out.println(e.getMessage());
???????
}
??? }
?
??? public void setGeoReferencing(PlanarImage src, String
projfilename) throws FileNotFoundException
???
{
??????? double
xscale;
??????? double
yscale;
??????? double
lonNW;
??????? double
latNW;
???????
??????? try
???????
{
???????????
FileReader
projectionFile;
???????????
projectionFile = new
FileReader(projfilename);
???????????
BufferedReader reader = new
BufferedReader(projectionFile);
???????????
String line =
reader.readLine();
???????????
System.out.println("xscale=" +
line);
???????????
xscale = Double.valueOf(line).doubleValue();
?
??????????? line =
reader.readLine();
???????????
line =
reader.readLine();
???????????
line =
reader.readLine();
???????????
System.out.println("yscale=" +
line);
???????????
yscale =
-Double.valueOf(line).doubleValue();
???????????
//
System.out.println(line);
???????????
line =
reader.readLine();
???????????
lonNW =
Double.valueOf(line).doubleValue();
???????????
System.out.println("lonNW=" +
line);
???????????
line =
reader.readLine();
???????????
latNW =
Double.valueOf(line).doubleValue();
???????????
System.out.println("latNW=" + line + " width=" +
sourceWidth
???????????????????
+ " sourceHeigth" + sourceHeigth);
?
??????????? //
reader.close();
???????????
projectionFile.close();
???????????
reader.close();
?
??????????? // if
(xsize == -1 || ysize ==
-1)
??????????? //
{
???????????
init((double) (latNW), (double)
(lonNW),
???????????????????
(double) (latNW - (xscale *
(sourceHeigth))),
???????????????????
(double) (lonNW + (yscale *
(sourceWidth))),
???????????????????
(double) xscale, (double)
yscale);
???????????
// }
??????????? //
else
??????????? //
init((double) (latNW), (double) (lonNW), (double) (latNW
-
??????????? //
(xscale * ysize)), (double) (lonNW + (yscale *
xsize)),(double)
???????????
// xscale, (double) yscale);
?
??????? }
??????? catch (IOException e)
???????
{
???????????
System.out.println("setgeo :" +
e.getMessage());
???????
}
??? }
?
??? void init(double lt, double ln, double lt_2, double
ln_2, double xim_scale,double yim_scale)
???
{
??????? lat = (float)
lt;
??????? lon = (float) ln;
?
??????? ximage_scale =
xim_scale;
??????? yimage_scale =
yim_scale;
??????? // sourcelat =
lt;
??????? // sourcelon = lon;
?
??????? lat2 =
lt_2;
??????? lon2 = ln_2;
?
??????? System.out.println("lat " + lat
+ " lon " + lon + " lat2 " + lat2+ " lon2 " + lon2);
?
??? }
?
??? private String formatDMSPoint(DMSLatLonPoint p)
??? {
??????? String
res = "[[";
??????? res +=
p.lat_isnegative ? "-" : "";
??????? res
+= p.lat_degrees + " " + p.lat_minutes + " " + p.lat_seconds + "]
[";
??????? res += p.lon_isnegative ? "-"
: "";
??????? res += p.lon_degrees + " " +
p.lon_minutes + " " + p.lon_seconds+
"]]";
??????? return
res;
??? }
}
Need a new ride? Check out the largest site for U.S. used car listings at AOL Autos.
--
[To unsubscribe to this list send an email to "majdart_at_bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Thu May 08 2008 - 17:27:26 EDT