]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/TiffInterface.java
Fix elevation bounding box profile shift & elevation transform fixes
[simantics/district.git] / org.simantics.maps.elevation.server / src / org / simantics / maps / elevation / server / TiffInterface.java
index 9e0a651407cd71acd1e70e587b8e0395c8a96976..60d7e5650a0c20e3addfdb195427922fe9508ee0 100644 (file)
@@ -6,8 +6,10 @@ 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;
@@ -18,7 +20,6 @@ public class TiffInterface {
 
     private final Path tifPath;
     private GridCoverage2D coverage;
-    private CoordinateReferenceSystem crs;
 
     private boolean init = false;
 
@@ -32,7 +33,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 +43,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 +101,6 @@ public class TiffInterface {
     }
 
     public CoordinateReferenceSystem getCRS() {
-        return crs;
+        return coverage.getCoordinateReferenceSystem();
     }
 }