X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.maps.elevation.server%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Felevation%2Fserver%2FTiffInterface.java;h=f5935318348612517d6a6db3317e7b9b325ce934;hb=refs%2Fchanges%2F64%2F3964%2F2;hp=9e0a651407cd71acd1e70e587b8e0395c8a96976;hpb=96cdfb0ff0a6bc5dfdc4edf60a3345dd7532003e;p=simantics%2Fdistrict.git diff --git a/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/TiffInterface.java b/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/TiffInterface.java index 9e0a6514..f5935318 100644 --- a/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/TiffInterface.java +++ b/org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/TiffInterface.java @@ -1,24 +1,26 @@ package org.simantics.maps.elevation.server; import java.awt.image.DataBuffer; +import java.io.Closeable; import java.nio.file.Path; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.gce.geotiff.GeoTiffReader; import org.geotools.geometry.Envelope2D; +import org.geotools.referencing.CRS; import org.opengis.geometry.DirectPosition; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.opengis.referencing.operation.MathTransform; import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TiffInterface { +public class TiffInterface implements Closeable { private static final Logger LOGGER = LoggerFactory.getLogger(TiffInterface.class); private final Path tifPath; private GridCoverage2D coverage; - private CoordinateReferenceSystem crs; private boolean init = false; @@ -32,7 +34,6 @@ public class TiffInterface { try { reader = new GeoTiffReader(this.tifPath.toFile()); this.coverage = reader.read(null); - this.crs = coverage.getCoordinateReferenceSystem(); this.init = true; } catch (Exception e) { LOGGER.error("Could not load {}", tifPath, e); @@ -43,6 +44,20 @@ public class TiffInterface { } } + public boolean contains(DirectPosition pos) { + ensureInit(); + Envelope2D e = coverage.getEnvelope2D(); + try { + MathTransform transform = CRS.findMathTransform(pos.getCoordinateReferenceSystem(), getCRS(), false); + DirectPosition target = transform.transform(pos, null); + boolean contains = e.contains(target); + return contains; + } catch (Exception ex) { + ex.printStackTrace(); + return false; + } + } + public Number lookup(DirectPosition pos) { ensureInit(); Object r = coverage.evaluate(pos); @@ -87,6 +102,6 @@ public class TiffInterface { } public CoordinateReferenceSystem getCRS() { - return crs; + return coverage.getCoordinateReferenceSystem(); } }