X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.maps%2Fsrc%2Forg%2Fsimantics%2Fmaps%2Fsg%2FMapNode.java;h=84338bfbc62bb4523612cd75aae93e6a4bb47ef8;hb=00e4eca98cef6d77d5023f4b424f9e8da0487463;hp=b8b54e31afa380b30c28a9e773d1122e9fff5d21;hpb=02ecca5e61d2eb17de40cc058be678b414aaad00;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.maps/src/org/simantics/maps/sg/MapNode.java b/org.simantics.district.maps/src/org/simantics/maps/sg/MapNode.java index b8b54e31..84338bfb 100644 --- a/org.simantics.district.maps/src/org/simantics/maps/sg/MapNode.java +++ b/org.simantics.district.maps/src/org/simantics/maps/sg/MapNode.java @@ -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<= 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