/*
* Copyright 2010 Nabeel Mukhtar
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.appspot.bitlyminous.gateway;
import com.appspot.bitlyminous.constant.ApplicationConstants;
/**
* The Class GoogleStaticMapsGateway.
*/
public class GoogleStaticMapsGateway {
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// constants
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/** The Constant GmapStaticURI. */
public static final String GmapStaticURI = "http://maps.google.com/staticmap";
/** The Constant GmapLicenseKey. */
public static final String GmapLicenseKey = "key";
/** The Constant CenterKey. */
public static final String CenterKey = "center";
/** The Constant ZoomKey. */
public static final String ZoomKey = "zoom";
/** The Constant ZoomMax. */
public static final int ZoomMax = 19;
/** The Constant ZoomMin. */
public static final int ZoomMin = 0;
/** The Constant ZoomDefault. */
public static final int ZoomDefault = 10;
/** The Constant SizeKey. */
public static final String SizeKey = "size";
/** The Constant SizeSeparator. */
public static final String SizeSeparator = "x";
/** The Constant SizeMin. */
public static final int SizeMin = 10;
/** The Constant SizeMax. */
public static final int SizeMax = 512;
/** The Constant SizeDefault. */
public static final int SizeDefault = SizeMax;
/** The Constant MarkerSeparator. */
public static final String MarkerSeparator = "|";
/** The Constant MarkersKey. */
public static final String MarkersKey = "markers";
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// data
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/** The Gmap license. */
public String GmapLicense = "";
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// set the license key
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
* Instantiates a new google static maps gateway.
*
* @param lic the lic
*/
public GoogleStaticMapsGateway(String lic) {
GmapLicense = lic;
}
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// methods
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
* Gets the map.
*
* @param lat the lat
* @param lon the lon
*
* @return the map
*/
public String getMap(double lat, double lon) {
return getMap(lat, lon, SizeMax, SizeMax);
}
/**
* Gets the map.
*
* @param lat the lat
* @param lon the lon
* @param sizeW the size w
* @param sizeH the size h
*
* @return the map
*/
public String getMap(double lat, double lon, int sizeW, int sizeH) {
return getMap(lat, lon, sizeW, sizeH, ZoomDefault);
}
/**
* Gets the map.
*
* @param lat the lat
* @param lon the lon
* @param sizeW the size w
* @param sizeH the size h
* @param zoom the zoom
*
* @return the map
*/
public String getMap(double lat, double lon, int sizeW, int sizeH,
int zoom) {
return getURI(lat, lon, sizeW, sizeH, zoom);
}
/**
* Gets the map.
*
* @param lat the lat
* @param lon the lon
* @param sizeW the size w
* @param sizeH the size h
* @param markers the markers
*
* @return the map
*/
public String getMap(double lat, double lon, int sizeW, int sizeH,
MapMarker... markers) {
return getURI(lat, lon, sizeW, sizeH, markers);
}
/**
* Gets the map.
*
* @param lat the lat
* @param lon the lon
* @param markers the markers
*
* @return the map
*/
public String getMap(double lat, double lon, MapMarker... markers) {
return getMap(lat, lon, SizeMax, SizeMax, markers);
}
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// param handling and uri generation
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
* Gets the uRI.
*
* @param lat the lat
* @param lon the lon
* @param sizeW the size w
* @param sizeH the size h
* @param markers the markers
*
* @return the uRI
*/
public String getURI(double lat, double lon, int sizeW, int sizeH,
MapMarker... markers) {
_validateParams(sizeW, sizeH, ZoomDefault);
// generate the URI
StringBuilder sb = new StringBuilder();
sb.append(GmapStaticURI);
// size key
sb.append("?").append(SizeKey).append("=").append(sizeW).append(
SizeSeparator).append(sizeH);
// markers key
sb.append("&").append(MarkerUtils.toString(markers));
// maps key
sb.append("&").append(GmapLicenseKey).append("=").append(GmapLicense);
return sb.toString();
}
/**
* Gets the uRI.
*
* @param lat the lat
* @param lon the lon
* @param sizeW the size w
* @param sizeH the size h
* @param zoom the zoom
*
* @return the uRI
*/
public String getURI(double lat, double lon, int sizeW, int sizeH, int zoom) {
_validateParams(sizeW, sizeH, zoom);
// generate the URI
StringBuilder sb = new StringBuilder();
sb.append(GmapStaticURI);
// center key
sb.append("?").append(CenterKey).append("=").append(lat).append(",")
.append(lon);
// zoom key
sb.append("&").append(ZoomKey).append("=").append(zoom);
// size key
sb.append("&").append(SizeKey).append("=").append(sizeW).append(
SizeSeparator).append(sizeH);
// markers key
sb.append("&").append(MarkerUtils.toString(new MapMarker(lat, lon)));
// maps key
sb.append("&").append(GmapLicenseKey).append("=").append(GmapLicense);
return sb.toString();
}
/**
* _validate params.
*
* @param sizeW the size w
* @param sizeH the size h
* @param zoom the zoom
*/
private void _validateParams(int sizeW, int sizeH, int zoom) {
if (zoom < ZoomMin || zoom > ZoomMax)
throw new IllegalArgumentException("zoom value is out of range ["
+ ZoomMin + "-" + ZoomMax + "]");
if (sizeW < SizeMin || sizeW > SizeMax)
throw new IllegalArgumentException("width is out of range ["
+ SizeMin + "-" + SizeMax + "]");
if (sizeH < SizeMin || sizeH > SizeMax)
throw new IllegalArgumentException("height is out of range ["
+ SizeMin + "-" + SizeMax + "]");
}
/**
* The Class MarkerUtils.
*/
public static class MarkerUtils {
/**
* To string.
*
* @param markers the markers
*
* @return the string
*/
public static String toString(MapMarker... markers) {
if (markers.length > 0) {
StringBuilder sb = new StringBuilder();
sb.append(MarkersKey).append("=");
for (int i = 0; i < markers.length; i++) {
sb.append(markers[i].toString());
if (i != markers.length - 1)
sb.append(MarkerSeparator);
}
return sb.toString();
} else {
return "";
}
}
}// class MarkerUtils
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// self test method
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
* The main method.
*
* @param args the arguments
*/
public static void main(String[] args) {
GoogleStaticMapsGateway map = new GoogleStaticMapsGateway(ApplicationConstants.GOOGLE_API_KEY);
double lat = 38.931099;
double lon = -77.3489;
double lat1 = 40.742100;
double lon1 = -74.001801;
String u1 = map.getMap(lat, lon);
System.out.println(u1);
String u2 = map.getMap(lat, lon, 256, 256);
System.out.println(u2);
String u3 = map.getMap(lat, lon, new MapMarker(lat, lon,
MapMarker.MarkerColor.blue, 'a'));
System.out.println(u3);
String u4 = map.getMap(lat, lon, 250, 500, new MapMarker(lat, lon,
MapMarker.MarkerColor.green, 'v'), new MapMarker(lat1, lon1,
MapMarker.MarkerColor.red, 'n'));
System.out.println(u4);
}
}// end class MapLookup