package com.nutiteq.maps;
import com.nutiteq.maps.projections.EPSG3785;
import com.nutiteq.ui.Copyright;
import com.nutiteq.ui.StringCopyright;
/**
* General QuadKey-based API connector (baseUrl{quadkey}format style).
*/
public class QKMap extends EPSG3785 implements UnstreamedMap {
private final String baseUrl;
private final String format;
/**
* Quadtree based map general server API connector
*
* @param copyright
* Copyright graphics drawn to the map
* @param baseUrl
* URL beginning for the map tile request. Final URL will be
* generated as <b>baseUrl</b><I>QuadKey-number</i><b>format</b>
* @param tileSize
* Size of tile image in pixels, usually 256
* @param format
* Tile image format, usually "png" or "jpg".
* @param minZoom
* Minimum (world) zoom level for service. Could be 0
* @param maxZoom
* Maximum zoom level. E.g. for OSM set it to 19
*/
public QKMap(final Copyright copyright, final String baseUrl,
final int tileSize, final int minZoom, final int maxZoom,
final String format) {
super(copyright, tileSize, minZoom, maxZoom);
this.baseUrl = baseUrl;
this.format = format;
}
/**
* Quadtree based map general server API connector
*
* @param copyright
* Copyright as String
* @param baseUrl
* URL beginning for the map tile request. Final URL will be
* generated as <b>baseUrl</b><I>QuadKey-number</i><b>format</b>
* @param tileSize
* Size of tile image in pixels, usually 256
* @param format
* Tile image format, usually "png" or "jpg".
* @param minZoom
* Minimum (world) zoom level for service. Could be 0
* @param maxZoom
* Maximum zoom level. E.g. for OSM set it to 19
*/
public QKMap(final String copyright, final String baseUrl,
final int tileSize, final int minZoom, final int maxZoom,
final String format) {
this(new StringCopyright(copyright), baseUrl, tileSize, minZoom,
maxZoom, format);
}
public final String buildPath(final int mapX, final int mapY, final int zoom) {
final int tmpX = mapX / getTileSize();
final int tmpY = mapY / getTileSize();
final StringBuffer buf = new StringBuffer(baseUrl);
for (int i = zoom - 1; i >= 0; i--) {
buf.append((((tmpY >> i) & 1) << 1) + ((tmpX >> i) & 1));
}
buf.append(format);
return buf.toString();
}
}