// Created by plusminus on 17:53:07 - 25.09.2008
package org.androad.osm.views.util;
import android.graphics.Point;
import org.osmdroid.tileprovider.MapTile;
import org.osmdroid.util.BoundingBoxE6;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.util.constants.MathConstants;
import org.osmdroid.views.util.constants.MapViewConstants;
import org.androad.osm.util.constants.OSMConstants;
import microsoft.mappoint.TileSystem;
import java.util.List;
/**
*
* @author Nicolas Gramlich
*
*/
public class Util implements MapViewConstants, OSMConstants, MathConstants{
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
// ===========================================================
// Constructors
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public static void calculateNeededTilesForZoomLevelInBoundingBox(final List<MapTile> tilesNeeded, final int zoom, final BoundingBoxE6 bbE6Visible) {
final MapTile upperLeftTile = getMapTileFromCoordinates(bbE6Visible.getLatNorthE6(), bbE6Visible.getLonWestE6(), zoom);
final MapTile lowerRightTile = getMapTileFromCoordinates(bbE6Visible.getLatSouthE6(), bbE6Visible.getLonEastE6(), zoom);
final int countOfTilesLat = Math.abs(upperLeftTile.getY() - lowerRightTile.getY()) + 1;
final int countOfTilesLon = Math.abs(upperLeftTile.getX() - lowerRightTile.getX()) + 1;
for(int i = 0; i < countOfTilesLat; i++) {
for(int j = 0; j < countOfTilesLon; j++) {
final MapTile tile = new MapTile(zoom, upperLeftTile.getX() + j, upperLeftTile.getY() + i );
tilesNeeded.add(tile);
}
}
}
public static MapTile getMapTileFromCoordinates(final GeoPoint gp, final int zoom) {
return getMapTileFromCoordinates(gp.getLatitudeE6() / 1E6, gp.getLongitudeE6() / 1E6, zoom);
}
public static MapTile getMapTileFromCoordinates(final int aLat, final int aLon, final int zoom) {
return getMapTileFromCoordinates(aLat / 1E6, aLon / 1E6, zoom);
}
public static MapTile getMapTileFromCoordinates(final double aLat, final double aLon, final int aZoom) {
final Point coords = TileSystem.LatLongToPixelXY(aLat, aLon, aZoom, null);
TileSystem.PixelXYToTileXY(coords.x, coords.y, coords);
return new MapTile(aZoom, coords.x, coords.y);
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}