package com.nutiteq.maps;
import com.mgmaps.utils.Tools;
import com.nutiteq.components.MapPos;
import com.nutiteq.components.WgsPoint;
import com.nutiteq.maps.projections.EPSG4326;
import com.nutiteq.ui.Copyright;
import com.nutiteq.ui.StringCopyright;
import com.nutiteq.utils.Utils;
/**
* Simple WMS map implementation using EPSG4326 projection for WMS version
* 1.1.1. Creates a WMS request for every needed tile.
*/
//TODO jaanus : explain widthHeightRatio with images!
public class SimpleWMSMap extends EPSG4326 implements GeoMap, UnstreamedMap {
private final String baseurl;
/**
* Constructor for the simple WMS implementation
*
* @param baseurl
* base URL for the service
* @param tileSize
* map tile size
* @param minZoom
* minimum zoom for the map
* @param maxZoom
* maximum zoom for the map
* @param layer
* LAYERS parameter
* @param format
* FORMAT parameter
* @param style
* STYLE parameter
* @param request
* REQUEST parameter
* @param copyright
* copyright string displayed on map
*/
public SimpleWMSMap(final String baseurl, final int tileSize, final int minZoom,
final int maxZoom, final String layer, final String format, final String style,
final String request, final String copyright) {
this(baseurl, tileSize, minZoom, maxZoom, layer, format, style, request, new StringCopyright(
copyright));
}
public SimpleWMSMap(final String baseurl, final int tileSize, final int minZoom,
final int maxZoom, final String layer, final String format, final String style,
final String request, final Copyright copyright) {
super(copyright, tileSize, minZoom, maxZoom);
final StringBuffer base = new StringBuffer(Utils.prepareForParameters(baseurl));
base.append("LAYERS=").append(Tools.urlEncode(layer));
base.append("&FORMAT=").append(Tools.urlEncode(format));
base.append("&SERVICE=WMS&VERSION=1.1.1");
base.append("&REQUEST=").append(Tools.urlEncode(request));
base.append("&STYLES=").append(Tools.urlEncode(style));
base.append("&EXCEPTIONS=").append(Tools.urlEncode("application/vnd.ogc.se_inimage"));
base.append("&SRS=EPSG%3A4326&BBOX=");
this.baseurl = base.toString();
}
public String buildPath(final int mapX, final int mapY, final int zoom) {
final StringBuffer result = new StringBuffer(baseurl);
final MapPos minPos = new MapPos(mapX, mapY + getTileSize(), zoom);
final MapPos maxPos = new MapPos(mapX + getTileSize(), mapY, zoom);
final WgsPoint minWgs = mapPosToWgs(minPos).toWgsPoint();
final WgsPoint maxWgs = mapPosToWgs(maxPos).toWgsPoint();
result.append(minWgs.getLon()).append(",").append(minWgs.getLat()).append(",");
result.append(maxWgs.getLon()).append(",").append(maxWgs.getLat());
result.append("&WIDTH=").append(getTileSize()).append("&HEIGHT=").append(getTileSize());
return result.toString();
}
}