]> 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 f679762cb8998f221d0f9b7fe44a8608599b9248..60d7e5650a0c20e3addfdb195427922fe9508ee0 100644 (file)
@@ -1,17 +1,15 @@
 package org.simantics.maps.elevation.server;
 
-import java.awt.geom.Point2D;
 import java.awt.image.DataBuffer;
 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.geometry.TransformedDirectPosition;
+import org.geotools.referencing.CRS;
 import org.opengis.geometry.DirectPosition;
-import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.operation.TransformException;
+import org.opengis.referencing.operation.MathTransform;
 import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,7 +20,6 @@ public class TiffInterface {
 
     private final Path tifPath;
     private GridCoverage2D coverage;
-    private CoordinateReferenceSystem crs;
 
     private boolean init = false;
 
@@ -36,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);
@@ -51,12 +47,9 @@ public class TiffInterface {
         ensureInit();
         Envelope2D e = coverage.getEnvelope2D();
         try {
-            TransformedDirectPosition tdp = new TransformedDirectPosition(pos.getCoordinateReferenceSystem(), crs, null);
-            tdp.transform(pos);
-            
-            Point2D p = tdp.toPoint2D();
-            
-            boolean contains = e.contains(p);
+            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();
@@ -108,6 +101,6 @@ public class TiffInterface {
     }
 
     public CoordinateReferenceSystem getCRS() {
-        return crs;
+        return coverage.getCoordinateReferenceSystem();
     }
 }