mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-13 09:07:27 -05:00
Initial code check in continued
This commit is contained in:
144
src/org/jdesktop/swingx/mapviewer/TileFactory.java
Normal file
144
src/org/jdesktop/swingx/mapviewer/TileFactory.java
Normal file
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* TileFactory.java
|
||||
*
|
||||
* Created on March 17, 2006, 8:01 PM
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package org.jdesktop.swingx.mapviewer;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.jdesktop.swingx.mapviewer.util.GeoUtil;
|
||||
|
||||
/**
|
||||
* A class that can produce tiles and convert coordinates to pixels
|
||||
* @author joshy
|
||||
*/
|
||||
public abstract class TileFactory
|
||||
{
|
||||
private TileFactoryInfo info;
|
||||
private List<TileListener> tileListeners = new ArrayList<TileListener>();
|
||||
|
||||
/**
|
||||
* Creates a new instance of TileFactory
|
||||
* @param info a TileFactoryInfo to configure this TileFactory
|
||||
*/
|
||||
protected TileFactory(TileFactoryInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the size of an edge of a tile in pixels at the current zoom level. Tiles must be square.
|
||||
* @param zoom the current zoom level
|
||||
* @return the size of an edge of a tile in pixels
|
||||
*/
|
||||
public int getTileSize(int zoom)
|
||||
{
|
||||
return getInfo().getTileSize(zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a Dimension containing the width and height of the map, in tiles at the current zoom level. So a
|
||||
* Dimension that returns 10x20 would be 10 tiles wide and 20 tiles tall. These values can be multipled by
|
||||
* getTileSize() to determine the pixel width/height for the map at the given zoom level
|
||||
* @return the size of the world bitmap in tiles
|
||||
* @param zoom the current zoom level
|
||||
*/
|
||||
public Dimension getMapSize(int zoom)
|
||||
{
|
||||
return GeoUtil.getMapSize(zoom, getInfo());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Tile at a given TilePoint and zoom level
|
||||
* @return the tile that is located at the given tilePoint for this zoom level. For example, if getMapSize() returns
|
||||
* 10x20 for this zoom, and the tilePoint is (3,5), then the appropriate tile will be located and returned. This
|
||||
* method must not return null. However, it can return dummy tiles that contain no data if it wants. This is
|
||||
* appropriate, for example, for tiles which are outside of the bounds of the map and if the factory doesn't
|
||||
* implement wrapping.
|
||||
* @param x the x value
|
||||
* @param y the y value
|
||||
* @param zoom the current zoom level
|
||||
*/
|
||||
public abstract Tile getTile(int x, int y, int zoom);
|
||||
|
||||
/**
|
||||
* Convert a pixel in the world bitmap at the specified zoom level into a GeoPosition
|
||||
* @param pixelCoordinate a Point2D representing a pixel in the world bitmap
|
||||
* @param zoom the zoom level of the world bitmap
|
||||
* @return the converted GeoPosition
|
||||
*/
|
||||
public GeoPosition pixelToGeo(Point2D pixelCoordinate, int zoom)
|
||||
{
|
||||
return GeoUtil.getPosition(pixelCoordinate, zoom, getInfo());
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a GeoPosition to a pixel position in the world bitmap a the specified zoom level.
|
||||
* @param c a GeoPosition
|
||||
* @param zoomLevel the zoom level to extract the pixel coordinate for
|
||||
* @return the pixel point
|
||||
*/
|
||||
public Point2D geoToPixel(GeoPosition c, int zoomLevel)
|
||||
{
|
||||
return GeoUtil.getBitmapCoordinate(c, zoomLevel, getInfo());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the TileFactoryInfo describing this TileFactory
|
||||
* @return a TileFactoryInfo
|
||||
*/
|
||||
public TileFactoryInfo getInfo()
|
||||
{
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a tile listener
|
||||
* @param listener the listener
|
||||
*/
|
||||
public void addTileListener(TileListener listener)
|
||||
{
|
||||
tileListeners.add(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a tile listener
|
||||
* @param listener the listener
|
||||
*/
|
||||
public void removeTileListener(TileListener listener)
|
||||
{
|
||||
tileListeners.remove(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disposes this TileFactory
|
||||
*/
|
||||
public abstract void dispose();
|
||||
|
||||
/**
|
||||
* Notifies all tile listeners
|
||||
* @param tile the tile
|
||||
*/
|
||||
protected void fireTileLoadedEvent(Tile tile)
|
||||
{
|
||||
for (TileListener listener : tileListeners)
|
||||
{
|
||||
listener.tileLoaded(tile);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this method to load the tile using, for example, an <code>ExecutorService</code>.
|
||||
* @param tile The tile to load.
|
||||
*/
|
||||
protected abstract void startLoading(Tile tile);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user