1 package org.simantics.maps.elevation.server;
3 import java.awt.geom.Rectangle2D;
4 import java.io.IOException;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.nio.file.Paths;
8 import java.util.Collection;
10 import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
14 public class SingletonTiffTileInterface {
16 private static final Logger LOGGER = LoggerFactory.getLogger(SingletonTiffTileInterface.class);
18 private static SingletonTiffTileInterface instance;
19 private TiffTileInterface tileInterface;
23 Activator.registerSpis();
26 private SingletonTiffTileInterface() {
27 Path tilesFolder = Paths.get(MapsElevationServerPreferences.tifFolderPath());
29 Files.createDirectories(tilesFolder);
30 } catch (IOException e) {
31 LOGGER.error("Could not create directories {}", tilesFolder.toAbsolutePath(), e);
33 LOGGER.info("Elevation server looking for tif files at {}", tilesFolder.toAbsolutePath());
34 tileInterface = new TiffTileInterface(tilesFolder);
37 private static SingletonTiffTileInterface getInstance() {
38 if (instance == null ) {
39 synchronized (SingletonTiffTileInterface.class) {
40 if (instance == null) {
41 instance = new SingletonTiffTileInterface();
48 public static synchronized void reloadElevationServer() {
49 if (instance != null) {
51 instance.tileInterface.close();
52 } catch (IOException e) {
53 LOGGER.error("Could not close current elevation server interface", e);
58 // let's re-initialize
62 public static double lookupd(double x, double y) {
63 return lookup(x, y).doubleValue();
66 public static Number lookup(double x, double y) {
67 return getInstance().tileInterface.lookup(x, y);
70 public static Collection<Rectangle2D> getBoundingBoxes() {
71 return getInstance().tileInterface.getBoundingBoxes();