/* * WMSService.java * * Created on October 7, 2006, 6:06 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package org.jdesktop.swingx.mapviewer.wms; import org.jdesktop.swingx.mapviewer.util.MercatorUtils; /** * A class that represents a WMS mapping service. * See http://en.wikipedia.org/wiki/Web_Map_Service for more information. * @author joshy */ public class WMSService { private String baseUrl; private String layer; /** * Creates a new instance of WMSService * TODO: not working -> remove */ public WMSService() { // by default use a known nasa server setLayer("BMNG"); setBaseUrl("http://wms.jpl.nasa.gov/wms.cgi?"); } /** * @param baseUrl the base URL * @param layer the layer */ public WMSService(String baseUrl, String layer) { this.baseUrl = baseUrl; this.layer = layer; } /** * Convertes to a WMS URL * @param x the x coordinate * @param y the y coordinate * @param zoom the zomm factor * @param tileSize the tile size * @return a URL request string */ public String toWMSURL(int x, int y, int zoom, int tileSize) { String format = "image/jpeg"; String styles = ""; String srs = "EPSG:4326"; int ts = tileSize; int circumference = widthOfWorldInPixels(zoom, tileSize); double radius = circumference / (2 * Math.PI); double ulx = MercatorUtils.xToLong(x * ts, radius); double uly = MercatorUtils.yToLat(y * ts, radius); double lrx = MercatorUtils.xToLong((x + 1) * ts, radius); double lry = MercatorUtils.yToLat((y + 1) * ts, radius); String bbox = ulx + "," + uly + "," + lrx + "," + lry; String url = getBaseUrl() + "version=1.1.1&request=" + "GetMap&Layers=" + layer + "&format=" + format + "&BBOX=" + bbox + "&width=" + ts + "&height=" + ts + "&SRS=" + srs + "&Styles=" + styles + // "&transparent=TRUE"+ ""; return url; } private int widthOfWorldInPixels(int zoom, int TILE_SIZE) { // int TILE_SIZE = 256; int tiles = (int) Math.pow(2, zoom); int circumference = TILE_SIZE * tiles; return circumference; } /** * @return the layer */ public String getLayer() { return layer; } /** * @param layer the layer */ public void setLayer(String layer) { this.layer = layer; } /** * @return the base URL */ public String getBaseUrl() { return baseUrl; } /** * @param baseUrl the base URL */ public void setBaseUrl(String baseUrl) { this.baseUrl = baseUrl; } }