Revision: 6502
http://sourceforge.net/p/jump-pilot/code/6502
Author: edso
Date: 2020-09-20 21:39:16 +0000 (Sun, 20 Sep 2020)
Log Message:
-----------
de-abstract GeoRaster, it's totally valid to use it independent
ReferencedGeoRaster functionality
minor refinements
make errors in fixed_reader final
little cleanup, removed obsolete code
Modified Paths:
--------------
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
Modified:
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java
===================================================================
---
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java
2020-09-20 19:02:12 UTC (rev 6501)
+++
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java
2020-09-20 21:39:16 UTC (rev 6502)
@@ -81,8 +81,9 @@
import com.vividsolutions.jump.workbench.model.Disposable;
import com.vividsolutions.jump.workbench.model.Prioritized;
-public abstract class GeoRaster implements Disposable {
+public class GeoRaster implements Disposable {
protected String imageFileLocation;
+ private URI uri = null;
protected Object fixed_reader = null;
protected RenderedOp src = null;
private ImageReader src_reader = null;
@@ -128,9 +129,12 @@
public GeoRaster(String imageFileLocation, Object fixed_reader) {
this.imageFileLocation = imageFileLocation;
this.fixed_reader = fixed_reader;
+ }
+ protected URI getURI() {
+ return uri;
}
-
+
/**
* Basic fetchRasters retrieves a raster from a file. To get a raster from
* somewhere else, override this method in subclasses.
@@ -140,12 +144,17 @@
* @throws ReferencedImageException
*/
protected void fetchRaster() throws ReferencedImageException {
- final URI uri;
+ // we accept either URI strings or string file paths
try {
uri = new URI(imageFileLocation);
} catch (URISyntaxException e) {
- throw new ReferencedImageException(e);
+ Logger.debug("not an URI, will treat as path -> "+imageFileLocation, e);
+ File file = new File(imageFileLocation);
+ uri = file.toURI();
}
+ // check availability early
+ if (!new File(uri).canRead())
+ throw new ReferencedImageException("cannot read file ->
"+imageFileLocation);
// prepare jai parameters
final ParameterBlockJAI pbjImageRead;
@@ -153,77 +162,77 @@
pbjImageRead = new ParameterBlockJAI("ImageRead");
pbjImageRead.setParameter("readParam", param);
- try {
- // route, if fixed_reader was set
- List<ImageReaderSpi> affirmed_readers;
- // default case, auto detection
- if (fixed_reader == null) {
- affirmed_readers = new ArrayList(listValidImageIOReaders(uri, null));
- // sort readers by priority
- Collections.sort(affirmed_readers, new Comparator<ImageReaderSpi>() {
- public int compare(final ImageReaderSpi o1, final ImageReaderSpi o2)
{
- final Prioritized p1 = new Prioritized() {
- public int getPriority() {
- return GeoImageFactory.getPriority(o1);
- }
- };
- final Prioritized p2 = new Prioritized() {
- public int getPriority() {
- return GeoImageFactory.getPriority(o2);
- }
- };
+ // route, if fixed_reader was set
+ List<ImageReaderSpi> affirmed_readers;
+ // default case, auto detection
+ if (fixed_reader == null) {
+ affirmed_readers = new ArrayList(listValidImageIOReaders(uri, null));
+ // sort readers by priority
+ Collections.sort(affirmed_readers, new Comparator<ImageReaderSpi>() {
+ public int compare(final ImageReaderSpi o1, final ImageReaderSpi o2) {
+ final Prioritized p1 = new Prioritized() {
+ public int getPriority() {
+ return GeoImageFactory.getPriority(o1);
+ }
+ };
+ final Prioritized p2 = new Prioritized() {
+ public int getPriority() {
+ return GeoImageFactory.getPriority(o2);
+ }
+ };
//
System.out.println(o1+"="+p1.getPriority()+"/"+o2+"="+p2.getPriority());
- return Prioritized.COMPARATOR.compare(p1, p2);
- }
- });
- }
- // fixed reader is imageio reader
- else if (fixed_reader instanceof ImageReaderSpi)
- affirmed_readers = Collections.singletonList((ImageReaderSpi)
fixed_reader);
- else {
- // fixed reader is something else, hopefully jai codec ;)
- // simply define an empty imageio reader list here to skip to jai below
- affirmed_readers = Collections.emptyList();
- }
+ return Prioritized.COMPARATOR.compare(p1, p2);
+ }
+ });
+ }
+ // fixed reader is imageio reader
+ else if (fixed_reader instanceof ImageReaderSpi)
+ affirmed_readers = Collections.singletonList((ImageReaderSpi)
fixed_reader);
+ else {
+ // fixed reader is something else, hopefully jai codec ;)
+ // simply define an empty imageio reader list here to skip to jai below
+ affirmed_readers = Collections.emptyList();
+ }
- // this is skipped if list is empty
- // TODO: not sure looping makes sense here as image is
- // actually rendered much later
- for (Iterator<ImageReaderSpi> i = affirmed_readers.listIterator(); i
- .hasNext();) {
+ // this is skipped if list is empty
+ // TODO: not sure looping makes sense here as image is
+ // actually rendered much later
+ for (Iterator<ImageReaderSpi> i = affirmed_readers.listIterator(); i
+ .hasNext();) {
- ImageReaderSpi readerSpi = ((ImageReaderSpi) i.next());
+ ImageReaderSpi readerSpi = ((ImageReaderSpi) i.next());
- Logger.trace("Trying reader "+GeoImageFactory.loaderString(readerSpi));
+ Logger.trace("Trying reader "+GeoImageFactory.loaderString(readerSpi));
- try {
- src_input = createInput(uri, readerSpi);
+ try {
+ src_input = createInput(uri, readerSpi);
- src_reader = readerSpi.createReaderInstance(/* src_input */);
+ src_reader = readerSpi.createReaderInstance(/* src_input */);
- src_reader.setInput(src_input);
- pbjImageRead.setParameter("Input", src_input);
- pbjImageRead.setParameter("Reader", src_reader);
-
- src = JAI.create("ImageRead", pbjImageRead, null);
+ src_reader.setInput(src_input);
+ pbjImageRead.setParameter("Input", src_input);
+ pbjImageRead.setParameter("Reader", src_reader);
- // success OR dispose & try plain JAI below
- if (src != null && src.getWidth() > 0) {
- // set info vars
- type = src_reader.getFormatName();
- used_loader = src_reader;
- return;
- }
- else
- dispose();
- } catch (Exception e) {
- // ok, this didn't work try the next one
- Logger.trace(e);
+ src = JAI.create("ImageRead", pbjImageRead, null);
+
+ // success OR dispose & try plain JAI below
+ if (src != null && src.getWidth() > 0) {
+ // set info vars
+ type = src_reader.getFormatName();
+ used_loader = src_reader;
+ return;
+ }
+ else
dispose();
- }
+ } catch (Exception e) {
+ // if fixed_reader failed, it failed finally and we'll have to throw
the reason
+ if (fixed_reader != null && fixed_reader == readerSpi)
+ throw new ReferencedImageException(e);
+ // ok, this didn't work try the next one
+ Logger.trace(e);
+ // clean up any residue
+ dispose();
}
- } catch (IOException e) {
- throw new ReferencedImageException(e);
}
// try JAI codec as fallthrough or if defined
@@ -304,6 +313,7 @@
return used_loader;
}
+ // TODO: probably better moved to GeoImage where the rendering is actually
handled
public RenderingHints createCacheRenderingHints() {
if (src instanceof RenderedOp && src.getWidth() > 2000
&& src.getHeight() > 2000 && cache_hints == null) {
@@ -433,7 +443,7 @@
* create a list of ImageReaderSpi's supposedly able to open the URI
*/
static protected List<ImageReaderSpi> listValidImageIOReaders(URI uri,
- Class filter) throws IOException {
+ Class filter) {
resetGDALReaderSelection();
Modified:
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
===================================================================
---
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
2020-09-20 19:02:12 UTC (rev 6501)
+++
core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoReferencedRaster.java
2020-09-20 21:39:16 UTC (rev 6502)
@@ -68,8 +68,6 @@
public class GeoReferencedRaster extends GeoRaster {
private final String MSG_GENERAL = "This is not a valid GeoTIFF file.";
- String fileName;
-
Envelope envModel_image;
Envelope envModel_image_backup;
@@ -79,8 +77,6 @@
private double dblModelUnitsPerRasterUnit_X;
private double dblModelUnitsPerRasterUnit_Y;
- // boolean hoPatch = false;
-
/**
* Called by Java2XML
*
@@ -93,7 +89,6 @@
public GeoReferencedRaster(String location, Object reader)
throws ReferencedImageException {
super(location, reader);
- fileName = imageFileLocation;
readRasterfile();
}
@@ -257,7 +252,7 @@
// String name = worldFileName();
InputStream is = null;
try {
- is = WorldFile.find(fileName);
+ is = WorldFile.find(getURI().toString());
// Read the tags from the tiff worldfile.
List lines = FileUtil.getContents(is);
double[] tags = new double[6];
@@ -285,12 +280,7 @@
protected void readRasterfile() throws ReferencedImageException {
super.readRasterfile();
- URI uri;
- try {
- uri = new URI(imageFileLocation);
- } catch (URISyntaxException e) {
- throw new ReferencedImageException(e);
- }
+ URI uri = getURI();
// Try to find and parse world file.
try {
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel