]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.elevation.server/src/org/simantics/maps/elevation/server/TiffTileInterface.java
Add profile to show bounding boxes for elevation server
[simantics/district.git] / org.simantics.maps.elevation.server / src / org / simantics / maps / elevation / server / TiffTileInterface.java
index 900630dc42bffc386eabf0fcf203c872599fe53a..d6f1910e7057efce2c19b6f64e77d64de0c4df2b 100644 (file)
@@ -1,18 +1,17 @@
 package org.simantics.maps.elevation.server;
 
+import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.Collection;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.github.benmanes.caffeine.cache.Caffeine;
-import com.github.benmanes.caffeine.cache.LoadingCache;
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.index.strtree.STRtree;
-
 import org.geotools.geometry.DirectPosition2D;
 import org.geotools.geometry.Envelope2D;
 import org.geotools.referencing.CRS;
@@ -22,6 +21,12 @@ import org.opengis.referencing.operation.MathTransform;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.benmanes.caffeine.cache.Caffeine;
+import com.github.benmanes.caffeine.cache.LoadingCache;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.index.strtree.STRtree;
+
 public class TiffTileInterface {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TiffTileInterface.class);
@@ -79,6 +84,7 @@ public class TiffTileInterface {
                 synchronized(index) {
                     index.insert(envelope, tifFile);
                 }
+                envelopes.put(tifFile, envelope);
             } catch (Exception e) {
                 LOGGER.error("Could not initialize index for file {}", tifFile, e);
             } finally {
@@ -91,6 +97,17 @@ public class TiffTileInterface {
         });
     }
 
+    private Map<Path, Envelope> envelopes = new ConcurrentHashMap<>();
+
+    public Collection<Rectangle2D> getBoundingBoxes() {
+        Collection<Rectangle2D> rects = envelopes.values().stream().map(env -> {
+            double x = env.getMinX();
+            double y = env.getMinY();
+            return new Rectangle2D.Double(x, y, env.getMaxX() - x, env.getMaxY() - y);
+        }).collect(Collectors.toList());
+        return rects;
+    }
+
     private static CoordinateReferenceSystem c4326;
 
     static {