@Override public String buildUrl(TileCode tileCode, String baseTmsUrl) { StringBuilder builder = new StringBuilder(baseTmsUrl); if (!baseTmsUrl.endsWith("/")) { builder.append("/"); } builder.append(tileCode.getTileLevel()); builder.append("/"); builder.append(tileCode.getX()); builder.append("/"); builder.append(tileCode.getY()); builder.append(extension); return builder.toString(); }
/** * Convert to readable string. * * @return readable string */ public String toString() { if (code == null) { return "[bounds=" + bounds + ",url=" + url + "]"; } return "[z=" + code.getTileLevel() + ",x=" + code.getX() + ",y=" + code.getY() + ",bounds=" + bounds + ",url=" + url + "]"; }
private boolean isYIndexUp(List<RasterTile> tiles) { RasterTile first = tiles.iterator().next(); for (RasterTile tile : tiles) { if (tile.getCode().getY() > first.getCode().getY()) { return tile.getBounds().getY() > first.getBounds().getY(); } else if (tile.getCode().getY() < first.getCode().getY()) { return tile.getBounds().getY() < first.getBounds().getY(); } } return false; }
private static String buildUrl(TileCode tileCode, TileMap tileMap, String baseTmsUrl) { if (tileCode == null || tileMap == null || baseTmsUrl == null) { throw new IllegalArgumentException("All parameters are required"); } StringBuilder builder; // assuming they are ordered: TileSet tileSet = tileMap.getTileSets().getTileSets().get(tileCode.getTileLevel()); String href = tileSet.getHref(); if (href.startsWith("http://") || href.startsWith("https://")) { builder = new StringBuilder(href); if (!href.endsWith("/")) { builder.append("/"); } } else { builder = new StringBuilder(baseTmsUrl); if (!baseTmsUrl.endsWith("/")) { builder.append("/"); } builder.append(href); builder.append("/"); } builder.append(tileCode.getX()); builder.append("/"); builder.append(tileCode.getY()); builder.append("."); builder.append(tileMap.getTileFormat().getExtension()); return builder.toString(); }
private Coordinate getTilePosition() { org.geomajas.geometry.Bbox layerBounds = renderer.getLayer().getLayerInfo().getMaxExtent(); // Calculate tile width and height for tileLevel=tileCode.getTileLevel(); This is in world space. double div = Math.pow(2, tileCode.getTileLevel()); double tileWidth = Math.ceil((scale * layerBounds.getWidth()) / div) / scale; double tileHeight = Math.ceil((scale * layerBounds.getHeight()) / div) / scale; // Now get the top-left corner for the tile in world space: double x = layerBounds.getX() + tileCode.getX() * tileWidth; double y = layerBounds.getY() + tileCode.getY() * tileHeight; // Convert to screen space. Note that the Y-axis is inverted, and so the top corner from the tile BBOX (world) // becomes the bottom corner (screen). That is why the tileHeight is added before compensating with the scale. x *= scale; y = -Math.round(scale * (y + tileHeight)); return new Coordinate(x, y); } }
private Bbox getPixelBounds(List<RasterTile> tiles) { Bbox bounds = null; int imageWidth = configurationService.getRasterLayerInfo(getLayerId()).getTileWidth(); int imageHeight = configurationService.getRasterLayerInfo(getLayerId()).getTileHeight(); for (RasterTile tile : tiles) { Bbox tileBounds = new Bbox(tile.getCode().getX() * imageWidth, tile.getCode().getY() * imageHeight, imageWidth, imageHeight); if (bounds == null) { bounds = new Bbox(tileBounds.getX(), tileBounds.getY(), tileBounds.getWidth(), tileBounds.getHeight()); } else { double minx = Math.min(tileBounds.getX(), bounds.getX()); double maxx = Math.max(tileBounds.getMaxX(), bounds.getMaxX()); double miny = Math.min(tileBounds.getY(), bounds.getY()); double maxy = Math.max(tileBounds.getMaxY(), bounds.getMaxY()); bounds = new Bbox(minx, miny, maxx - minx, maxy - miny); } } return bounds; }
@Override public Bbox getWorldBoundsForTile(ViewPort viewPort, WmsTileConfiguration tileConfig, TileCode tileCode) { double resolution = 1 / viewPort.getZoomStrategy().getZoomStepScale(tileCode.getTileLevel()); double worldTileWidth = tileConfig.getTileWidth() * resolution; double worldTileHeight = tileConfig.getTileHeight() * resolution; double x = tileConfig.getTileOrigin().getX() + tileCode.getX() * worldTileWidth; double y = tileConfig.getTileOrigin().getY() + tileCode.getY() * worldTileHeight; return new Bbox(x, y, worldTileWidth, worldTileHeight); }