]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.maps/src/org/simantics/maps/sg/MapNode.java
Some cleaning and fixing of district functionalities
[simantics/district.git] / org.simantics.district.maps / src / org / simantics / maps / sg / MapNode.java
index b8b54e31afa380b30c28a9e773d1122e9fff5d21..84338bfbc62bb4523612cd75aae93e6a4bb47ef8 100644 (file)
@@ -41,6 +41,7 @@ import java.util.concurrent.TimeUnit;
 import org.simantics.maps.WebService;
 import org.simantics.maps.osm.OSMTileProvider;
 import org.simantics.maps.pojo.TileJobQueue;
+import org.simantics.maps.prefs.MapsClientPreferences;
 import org.simantics.maps.tile.IFilter;
 import org.simantics.maps.tile.ITileJobQueue;
 import org.simantics.maps.tile.ITileListener;
@@ -165,11 +166,18 @@ public class MapNode extends G2DNode implements ITileListener  {
         }
     };
 
-    private int scale;
-
     public void init() {
+        // Construct WebService from client properties
+        String url;
+        if (MapsClientPreferences.useBuiltinServer())
+            url = MapsClientPreferences.possibleBuiltinServerURL();
+        else 
+            url = MapsClientPreferences.tileserverURL();
+        if (!url.endsWith("/"))
+            url = url + "/";
+        
         try {
-            ITileProvider provider = new OSMTileProvider(new WebService("http://localhost:8080/mapbox-studio-osm-bright.tm2/"), TILE_PIXEL_SIZE);
+            ITileProvider provider = new OSMTileProvider(new WebService(url), TILE_PIXEL_SIZE);
 
             // Try to load eclipse specific implementation of TileJobQueue, if it doesn't exist, fall back to pojo implementation 
             try {
@@ -223,8 +231,13 @@ public class MapNode extends G2DNode implements ITileListener  {
         if (!enabled)
             return;
 
-        Graphics2D g = (Graphics2D)g2d.create();
-        AffineTransform tr = (AffineTransform)g.getTransform().clone();
+        AffineTransform ot = g2d.getTransform();
+        g2d.transform(transform);
+        
+        AffineTransform tr = g2d.getTransform();
+        
+//        Graphics2D g = (Graphics2D)g2d.create();
+//        AffineTransform tr = (AffineTransform)g.getTransform().clone();
         
         double scaleX = Math.abs(tr.getScaleX());
         double scaleY = Math.abs(tr.getScaleY());
@@ -235,17 +248,17 @@ public class MapNode extends G2DNode implements ITileListener  {
         double offsetX = -tr.getTranslateX();
         double offsetY = -tr.getTranslateY();
 
-        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
         Rectangle2D sp = localToControl(new Rectangle2D.Double(0.0, 0.0, 1.0, 1.0));
-        Rectangle2D b = (Rectangle2D)((Rectangle)g.getRenderingHint(G2DRenderingHints.KEY_CONTROL_BOUNDS)).getBounds2D(); // getClipBounds is not accurate enough, use original clipbounds and scale here
+        Rectangle2D b = (Rectangle2D)((Rectangle)g2d.getRenderingHint(G2DRenderingHints.KEY_CONTROL_BOUNDS)).getBounds2D(); // getClipBounds is not accurate enough, use original clipbounds and scale here
 
         Rectangle2D viewbox = new Rectangle2D.Double(offsetX/scaleX, offsetY/scaleY, b.getWidth()/sp.getWidth(), b.getHeight()/sp.getHeight()); //g.getClipBounds();
         if(viewbox == null) return; // FIXME
 
         double smallerViewboxDimension = viewbox.getWidth() < viewbox.getHeight() ? viewbox.getWidth() * MAP_SCALE : viewbox.getHeight() * MAP_SCALE;
         int level = 0;
-        double tileSize = get360Scaled() * MAP_SCALE*2;
+        double tileSize = 360 * MAP_SCALE*2;
         while (level < MAX_TILE_LEVEL) {
             double ratio = smallerViewboxDimension / tileSize;
             if (ratio >= 0.85) {
@@ -254,7 +267,6 @@ public class MapNode extends G2DNode implements ITileListener  {
             tileSize *= 0.5;
             level++;
         }
-        System.out.println("level " + level);
         /*
          *  To convert y-coordinates to map coordinates in ruler, use:
          *    double val = (y-offsetY)/scaleY;
@@ -262,45 +274,39 @@ public class MapNode extends G2DNode implements ITileListener  {
          *    String str = formatValue(val);
          */
 
-        double minx = Math.min(get180Scaled(), Math.max(viewbox.getMinX(), -get180Scaled()));
-        double maxx = Math.min(get180Scaled(), Math.max(viewbox.getMaxX(), -get180Scaled()));
+        double minx = Math.min(180, Math.max(viewbox.getMinX(), -180));
+        double maxx = Math.min(180, Math.max(viewbox.getMaxX(), -180));
 
-        double miny = Math.min(get360Scaled(), Math.max(viewbox.getMinY()+get180Scaled(), 0));
-        double maxy = Math.min(get360Scaled(), Math.max(viewbox.getMaxY()+get180Scaled(), 0));
+        double miny = Math.min(360, Math.max(viewbox.getMinY()+180, 0));
+        double maxy = Math.min(360, Math.max(viewbox.getMaxY()+180, 0));
 
-        g.setTransform(new AffineTransform());
-        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+        g2d.setTransform(new AffineTransform());
+        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
 
         int levels = (1 << level);
 
         // http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
-        int left = (int)Math.floor( (minx + get180Scaled()) / get360Scaled() * (1<<level) );
-        int right = (int)Math.floor( (maxx + get180Scaled()) / get360Scaled() * (1<<level) );
-        int top = (int)Math.floor(miny / get360Scaled() * (1<<level));//  (int)Math.floor( (1 - Math.log(Math.tan(Math.toRadians(miny)) + 1 / Math.cos(Math.toRadians(miny))) / Math.PI) / 2 * (1<<level) );
-        int bottom = (int)Math.floor(maxy / get360Scaled() * (1<<level));//  (int)Math.floor( (1 - Math.log(Math.tan(Math.toRadians(maxy)) + 1 / Math.cos(Math.toRadians(maxy))) / Math.PI) / 2 * (1<<level) );
+        int left = (int)Math.floor( (minx + 180) / 360 * (1<<level) );
+        int right = (int)Math.floor( (maxx + 180) / 360 * (1<<level) );
+        int top = (int)Math.floor(miny / 360 * (1<<level));//  (int)Math.floor( (1 - Math.log(Math.tan(Math.toRadians(miny)) + 1 / Math.cos(Math.toRadians(miny))) / Math.PI) / 2 * (1<<level) );
+        int bottom = (int)Math.floor(maxy / 360 * (1<<level));//  (int)Math.floor( (1 - Math.log(Math.tan(Math.toRadians(maxy)) + 1 / Math.cos(Math.toRadians(maxy))) / Math.PI) / 2 * (1<<level) );
 
-        double tsx = get360Scaled() / (double)levels; // Size of tile on zoom level
+        double tsx = 360 / (double)levels; // Size of tile on zoom level
         for(int tx = left; tx <= right; tx++) {
             if(tx < 0 || tx >= levels) continue;
             for(int ty = top; ty <= bottom; ty++) {
                 if(ty < 0 || ty >= levels) continue;
                 TileKey tile = new TileKey(level, tx, ty);
                 double y = (double)ty - (double)levels/2; // In level 0 we have only one tile
-                paintTile(tileCache, g, tr, tile, tx*tsx-get180Scaled(), y*tsx, tsx);
+                paintTile(tileCache, g2d, tr, tile, tx*tsx-180, y*tsx, tsx);
             }
         }
-        g.dispose();
+//        g.dispose();
 
         // Check if transform has changed
         transformChanged(tr, level);
-    }
-
-    private double get360Scaled() {
-        return 360 * scale;
-    }
-    
-    private double get180Scaled() {
-        return 180 * scale;
+        
+        g2d.setTransform(ot);
     }
 
     @Override
@@ -575,8 +581,4 @@ public class MapNode extends G2DNode implements ITileListener  {
         repaint();
     }
 
-    public void setScale(int scale) {
-        this.scale = scale;
-    }
-
 }
\ No newline at end of file