[JPP-Devel] [jump-pilot:bugs] #498 Most GeoTIFF drivers fail with a simple GeoTIFF image
@edso >maybe you want to take a peek how other JUMPSs/Java apps access those and >implement it in OJ? Kosmo used Gdal to access to raster data, I think with GvSIG framework Possibly a pure Java solution that works with many TIFF types could be on ImageJ >if it used to work earlier try to identify the patchset that broke it and fix >that. No. It was not working in the past, see page : http://ojwiki.soldin.de/index.php?title=Display_ASTER_DEM_TIF_files_in_OpenJUMP --- ** [bugs:#498] Most GeoTIFF drivers fail with a simple GeoTIFF image** **Status:** open **Milestone:** OJ_1.16 **Created:** Sun Aug 30, 2020 08:02 AM UTC by michael michaud **Last Updated:** Sat Sep 05, 2020 04:19 PM UTC **Owner:** nobody **Attachments:** - [small_world.tif](https://sourceforge.net/p/jump-pilot/bugs/498/attachment/small_world.tif) (240.6 kB; image/tiff) I often have a bad experience trying to read simple geotiff. To have a more objective view of the situation, I get a very simple image from the test directory of GDAL library and tested it against all our drivers. Image is attached. Here are its main characteristics (I think they are very common one) : small_world.tif size : 400 x 200 Coordinate System : wgs84 (4326) Metadata : AREA_OR_POINT=AREA Image Structure Metadata : INTERLEAVE=BAND 3 bands, Block=400x20, Type=Byte, ColorInterp=RGB I tried to import it with all the image drivers we propose (8 from Open File + ImageRaster Sextante). 3 drivers only could import the image. All others fail throughing a rough java exception. Image Raster don't fail immediately, but it does not display the image and throws NPE if one try to get more information. List of success/failures and exceptions thrown Referenced Image (ImageIO[ext],JAI) : OK ImageIO TIFF Image Reader version 1.0 : OK ImageIO TIFF Image Reader version 1.1 : OK Standard TIFF Image Reader java.lang.IllegalAccessException: class com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset cannot access class com.sun.imageio.plugins.tiff.TIFFImageReaderSpi (in module java.desktop) because module java.desktop does not export com.sun.imageio.plugins.tiff to unnamed module @12405818 at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361) at java.base/jdk.internal.reflect.Reflection.ensureMemberAccess(Reflection.java:99) at java.base/java.lang.Class.newInstance(Class.java:579) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.createFeatureFactory(ImageryLayerDataset.java:236) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.attachImage(ImageryLayerDataset.java:117) Referenced Image (JAI TIF) java.lang.NullPointerException java.lang.NullPointerException at com.sun.media.jai.util.SunCachedTile.(SunCachedTile.java:80) at com.sun.media.jai.util.SunTileCache.add(SunTileCache.java:257) at javax.media.jai.OpImage.addTileToCache(OpImage.java:1087) at javax.media.jai.OpImage.getTile(OpImage.java:1142) at javax.media.jai.PlanarImage.getData(PlanarImage.java:2085) at javax.media.jai.RenderedImageAdapter.getData(RenderedImageAdapter.java:158) at javax.media.jai.ScaleOpImage.computeTile(ScaleOpImage.java:1099) at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904) at javax.media.jai.OpImage.getTile(OpImage.java:1129) at com.sun.media.jai.opimage.CropOpImage.getTile(CropOpImage.java:122) at com.sun.media.jai.opimage.TranslateIntOpImage.getTile(TranslateIntOpImage.java:132) at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2343) at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2299) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2525) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546) at com.vividsolutions.jump.workbench.imagery.geoimg.GeoImage.paint(GeoImage.java:285) at com.vividsolutions.jump.workbench.imagery.ReferencedImageStyle.paint(ReferencedImageStyle.java:61) Referenced Image (JAI TIF) : same error Buffered Image (common) : com.vividsolutions.jump.workbench.imagery.ReferencedImageException: java.lang.ArrayIndexOutOfBoundsException: Index 8000 out of bounds for length 8000 at com.vividsolutions.jump.workbench.imagery.graphic.CommonsImage.initImage(CommonsImage.java:112) at com.vividsolutions.jump.workbench.imagery.graphic.AbstractGraphicImage.computeEnvelope(AbstractGraphicImage.java:122) at com.vividsolutions.jump.workbench.imagery.graphic.AbstractGraphicImage.getEnvelope(AbstractGraphicImage.java:114) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.attachImage(ImageryLayerDataset.java:125) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.attachImage(ImageryLayerDataset.java:106) at
[JPP-Devel] [jump-pilot:bugs] #498 Most GeoTIFF drivers fail with a simple GeoTIFF image
If you agree I will keep this ticket open for OpenJUMP 2.0 --- ** [bugs:#498] Most GeoTIFF drivers fail with a simple GeoTIFF image** **Status:** open **Milestone:** OJ_1.16 **Created:** Sun Aug 30, 2020 08:02 AM UTC by michael michaud **Last Updated:** Fri Sep 04, 2020 09:46 PM UTC **Owner:** nobody **Attachments:** - [small_world.tif](https://sourceforge.net/p/jump-pilot/bugs/498/attachment/small_world.tif) (240.6 kB; image/tiff) I often have a bad experience trying to read simple geotiff. To have a more objective view of the situation, I get a very simple image from the test directory of GDAL library and tested it against all our drivers. Image is attached. Here are its main characteristics (I think they are very common one) : small_world.tif size : 400 x 200 Coordinate System : wgs84 (4326) Metadata : AREA_OR_POINT=AREA Image Structure Metadata : INTERLEAVE=BAND 3 bands, Block=400x20, Type=Byte, ColorInterp=RGB I tried to import it with all the image drivers we propose (8 from Open File + ImageRaster Sextante). 3 drivers only could import the image. All others fail throughing a rough java exception. Image Raster don't fail immediately, but it does not display the image and throws NPE if one try to get more information. List of success/failures and exceptions thrown Referenced Image (ImageIO[ext],JAI) : OK ImageIO TIFF Image Reader version 1.0 : OK ImageIO TIFF Image Reader version 1.1 : OK Standard TIFF Image Reader java.lang.IllegalAccessException: class com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset cannot access class com.sun.imageio.plugins.tiff.TIFFImageReaderSpi (in module java.desktop) because module java.desktop does not export com.sun.imageio.plugins.tiff to unnamed module @12405818 at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361) at java.base/jdk.internal.reflect.Reflection.ensureMemberAccess(Reflection.java:99) at java.base/java.lang.Class.newInstance(Class.java:579) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.createFeatureFactory(ImageryLayerDataset.java:236) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.attachImage(ImageryLayerDataset.java:117) Referenced Image (JAI TIF) java.lang.NullPointerException java.lang.NullPointerException at com.sun.media.jai.util.SunCachedTile.(SunCachedTile.java:80) at com.sun.media.jai.util.SunTileCache.add(SunTileCache.java:257) at javax.media.jai.OpImage.addTileToCache(OpImage.java:1087) at javax.media.jai.OpImage.getTile(OpImage.java:1142) at javax.media.jai.PlanarImage.getData(PlanarImage.java:2085) at javax.media.jai.RenderedImageAdapter.getData(RenderedImageAdapter.java:158) at javax.media.jai.ScaleOpImage.computeTile(ScaleOpImage.java:1099) at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904) at javax.media.jai.OpImage.getTile(OpImage.java:1129) at com.sun.media.jai.opimage.CropOpImage.getTile(CropOpImage.java:122) at com.sun.media.jai.opimage.TranslateIntOpImage.getTile(TranslateIntOpImage.java:132) at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2343) at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2299) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2525) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546) at com.vividsolutions.jump.workbench.imagery.geoimg.GeoImage.paint(GeoImage.java:285) at com.vividsolutions.jump.workbench.imagery.ReferencedImageStyle.paint(ReferencedImageStyle.java:61) Referenced Image (JAI TIF) : same error Buffered Image (common) : com.vividsolutions.jump.workbench.imagery.ReferencedImageException: java.lang.ArrayIndexOutOfBoundsException: Index 8000 out of bounds for length 8000 at com.vividsolutions.jump.workbench.imagery.graphic.CommonsImage.initImage(CommonsImage.java:112) at com.vividsolutions.jump.workbench.imagery.graphic.AbstractGraphicImage.computeEnvelope(AbstractGraphicImage.java:122) at com.vividsolutions.jump.workbench.imagery.graphic.AbstractGraphicImage.getEnvelope(AbstractGraphicImage.java:114) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.attachImage(ImageryLayerDataset.java:125) at com.vividsolutions.jump.workbench.imagery.ImageryLayerDataset.attachImage(ImageryLayerDataset.java:106) at com.vividsolutions.jump.workbench.imagery.ReferencedImageFactoryFileLayerLoader.createImageFeature(ReferencedImageFactoryFileLayerLoader.java:199) at com.vividsolutions.jump.workbench.imagery.ReferencedImageFactoryFileLayerLoader.open(ReferencedImageFactoryFileLayerLoader.java:102) at org.openjump.core.ui.plugin.file.open.OpenFileWizard.run(OpenFileWizard.java:164) GeoTIFF plus (JAI) :
[JPP-Devel] SVN: [6424] core/trunk/src/org/openjump/core/rasterimage/ GDALPamDataset.java
Revision: 6424 http://sourceforge.net/p/jump-pilot/code/6424 Author: ma15569 Date: 2020-09-05 09:45:01 + (Sat, 05 Sep 2020) Log Message: --- Added method to write raster statistics (max, min, mean,Std) and projection information to aux.xml file Modified Paths: -- core/trunk/src/org/openjump/core/rasterimage/GDALPamDataset.java Modified: core/trunk/src/org/openjump/core/rasterimage/GDALPamDataset.java === --- core/trunk/src/org/openjump/core/rasterimage/GDALPamDataset.java 2020-09-04 09:55:29 UTC (rev 6423) +++ core/trunk/src/org/openjump/core/rasterimage/GDALPamDataset.java 2020-09-05 09:45:01 UTC (rev 6424) @@ -2,6 +2,7 @@ import java.io.File; import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; @@ -16,6 +17,9 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; + +import org.openjump.core.ccordsys.utils.SRSInfo; +import org.openjump.core.ccordsys.utils.SridLookupTable; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -24,6 +28,8 @@ import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; +import com.vividsolutions.jump.workbench.JUMPWorkbench; + /** * * @author AdL @@ -132,6 +138,101 @@ } + +//[Giuseppe Aruta] 2020-09-05 +//Method to write raster statistics (max, min, mean,Std) and +//projection information to aux.xml file +// see https://desktop.arcgis.com/en/arcmap/10.3/manage-data/raster-and-images/auxiliary-files.htm +public void writeStatisticsAndSRS(File auxXmlFile, SRSInfo srsInfo, Stats stats) +throws ParserConfigurationException, TransformerConfigurationException, TransformerException, SAXException, IOException { + +DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); +DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); +Document doc; + +Element pamDatasetElement; +NodeList pamRasterBandNodeList; + +// Try to read the xml file +if(auxXmlFile.isFile()) { +try { +doc = docBuilder.parse(auxXmlFile); +} catch(SAXException | IOException ex) { +doc = docBuilder.newDocument(); +} +} else { +doc = docBuilder.newDocument(); +} + +// Check if PAMDataset element exists and, if not, create it +String pamDatasetTagName = "PAMDataset"; +pamDatasetElement = (Element) doc.getElementsByTagName(pamDatasetTagName).item(0); +if(pamDatasetElement == null) { +pamDatasetElement = doc.createElement(pamDatasetTagName); +} + +//Add SRS element first +String SRS; + try { + SRS = SridLookupTable.getOGCWKTFromWkidCode(srsInfo.getCode()); +Element srsElement = doc.createElement("SRS"); + + srsElement.appendChild(doc.createTextNode(SRS)); + pamDatasetElement.appendChild(srsElement); + } catch (URISyntaxException | IOException e) { + JUMPWorkbench.getInstance() + .getFrame() + .warnUser("OpenjUMP cannot decode/record SRS"); + } + +String pamRasterBandTagName = "PAMRasterBand"; +String bandAttribute = "band"; +String metadataElementName = "Metadata"; + +pamRasterBandNodeList = pamDatasetElement.getElementsByTagName(pamRasterBandTagName); +if(pamRasterBandNodeList != null && pamRasterBandNodeList.getLength() > 0) { +for(int b=0; bhttp://xml.apache.org/xslt}indent-amount;, "2"); +DOMSource source = new DOMSource(doc); +StreamResult result = new StreamResult(auxXmlFile); +transformer.transform(source, result); + +} + private Element updateMetadataElement(Document doc, Element metadataElement, Stats stats, int band) { Element mdi = doc.createElement("MDI"); ___ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel