Revision: 6424 http://sourceforge.net/p/jump-pilot/code/6424 Author: ma15569 Date: 2020-09-05 09:45:01 +0000 (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; b<pamRasterBandNodeList.getLength(); b++) { + Element pamRasterBandElement = (Element) pamRasterBandNodeList.item(b); + int bandNr = Integer.parseInt(pamRasterBandElement.getAttribute(bandAttribute)); + + if(bandNr == b+1) { + + Element metadataElement = (Element) pamRasterBandElement.getElementsByTagName(metadataElementName).item(0); + metadataElement = updateMetadataElement(doc, metadataElement, stats, band); + + pamRasterBandElement.appendChild(metadataElement); + pamDatasetElement.appendChild(pamRasterBandElement); + + } + } + } else { + for(int b=0; b<stats.getBandCount(); b++) { + + Element pamRasterBandElement = doc.createElement(pamRasterBandTagName); + Attr attr = doc.createAttribute(bandAttribute); + attr.setValue(Integer.toString(b+1)); + pamRasterBandElement.setAttributeNode(attr); + + Element metadataElement = doc.createElement(metadataElementName); + metadataElement = updateMetadataElement(doc, metadataElement, stats, band); + pamRasterBandElement.appendChild(metadataElement); + pamDatasetElement.appendChild(pamRasterBandElement); + } + + doc.appendChild(pamDatasetElement); + } + + // write the content into xml file + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://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