/*
* <copyright>
* Copyright 2012 BBN Technologies
* </copyright>
*/
package com.bbn.openmap.maptileservlet;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.util.logging.Logger;
import com.bbn.openmap.dataAccess.mapTile.EmptyTileHandler;
import com.bbn.openmap.dataAccess.mapTile.MapTileCoordinateTransform;
import com.bbn.openmap.dataAccess.mapTile.OSMMapTileCoordinateTransform;
import com.bbn.openmap.dataAccess.mapTile.SimpleEmptyTileHandler;
import com.bbn.openmap.proj.Mercator;
import com.bbn.openmap.proj.coords.LatLonPoint;
/**
* TileInfo can look at a path string and figure out zoom level, x, y for tiles.
*
* @author dietrick
*/
public class TileInfo {
int x;
int y;
int zoomLevel;
String format;
String pathInfo;
MapTileCoordinateTransform mtcTransform;
boolean valid = false;
Logger logger = Logger.getLogger("com.bbn.openmap.maptileservlet");
public TileInfo(String pathInfo) {
this.pathInfo = pathInfo;
if (pathInfo == null) {
return;
}
int dotIndex = pathInfo.lastIndexOf('.');
if (dotIndex > 0) {
format = pathInfo.substring(dotIndex + 1);
int ySlashIndex = pathInfo.lastIndexOf('/');
if (ySlashIndex > 0) {
String yString = pathInfo.substring(ySlashIndex + 1, dotIndex);
int xSlashIndex = pathInfo.lastIndexOf('/', ySlashIndex - 1);
if (xSlashIndex > 0) {
String xString = pathInfo.substring(xSlashIndex + 1, ySlashIndex);
int zSlashIndex = pathInfo.lastIndexOf('/', xSlashIndex - 1);
if (zSlashIndex >= 0) {
String zString = pathInfo.substring(zSlashIndex + 1, xSlashIndex);
// OK, we're here!
x = Integer.parseInt(xString);
y = Integer.parseInt(yString);
zoomLevel = Integer.parseInt(zString);
valid = true;
return;
}
}
}
}
logger.info("can't decode " + pathInfo);
}
public BufferedImage getBufferedImage(EmptyTileHandler eth) {
if (eth != null) {
LatLonPoint center = mtcTransform.tileUVToLatLon(new Point2D.Double(x + .5, y + .5), zoomLevel, new LatLonPoint.Double());
Mercator merc = new Mercator(center, mtcTransform.getScaleForZoom(zoomLevel), SimpleEmptyTileHandler.TILE_SIZE, SimpleEmptyTileHandler.TILE_SIZE);
logger.fine("going to create empty tile: " + pathInfo + " from "
+ eth.getClass().getName());
return eth.getImageForEmptyTile(pathInfo, x, y, zoomLevel, getMtcTransform(), merc);
}
return null;
}
public MapTileCoordinateTransform getMtcTransform() {
if (mtcTransform == null) {
mtcTransform = new OSMMapTileCoordinateTransform();
}
return mtcTransform;
}
public void setMtcTransform(MapTileCoordinateTransform mtcTransform) {
this.mtcTransform = mtcTransform;
}
}