[JPP-Devel] [jump-pilot:bugs] #498 Most GeoTIFF drivers fail with a simple GeoTIFF image

2020-09-05 Thread Giuseppe Aruta via Jump-pilot-devel
@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

2020-09-05 Thread Giuseppe Aruta via Jump-pilot-devel
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

2020-09-05 Thread jump-pilot-svn--- via Jump-pilot-devel
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