/*
* Copyright (C) 2012 United States Government as represented by the Administrator of the
* National Aeronautics and Space Administration.
* All Rights Reserved.
*/
package org.jgrasstools.nww.layers.defaults.raster;
import java.net.MalformedURLException;
import java.net.URL;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.avlist.AVList;
import gov.nasa.worldwind.avlist.AVListImpl;
import gov.nasa.worldwind.geom.Angle;
import gov.nasa.worldwind.geom.LatLon;
import gov.nasa.worldwind.layers.mercator.MercatorSector;
import gov.nasa.worldwind.util.LevelSet;
import gov.nasa.worldwind.util.Tile;
import gov.nasa.worldwind.util.TileUrlBuilder;
/**
* @version $Id: OSMMapnikLayer.java 1171 2013-02-11 21:45:02Z dcollins $
*/
public class OSMMapnikLayer extends BasicMercatorTiledImageLayer {
public OSMMapnikLayer() {
super(makeLevels());
}
private static LevelSet makeLevels() {
AVList params = new AVListImpl();
params.setValue(AVKey.TILE_WIDTH, 256);
params.setValue(AVKey.TILE_HEIGHT, 256);
params.setValue(AVKey.DATA_CACHE_NAME, "Earth/OSM-Mercator/OpenStreetMap Mapnik");
params.setValue(AVKey.SERVICE, "http://a.tile.openstreetmap.org/");
params.setValue(AVKey.DATASET_NAME, "h");
params.setValue(AVKey.FORMAT_SUFFIX, ".png");
params.setValue(AVKey.NUM_LEVELS, 22);
params.setValue(AVKey.NUM_EMPTY_LEVELS, 0);
params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, new LatLon(Angle.fromDegrees(22.5d), Angle.fromDegrees(45d)));
params.setValue(AVKey.SECTOR, new MercatorSector(-1.0, 1.0, Angle.NEG180, Angle.POS180));
params.setValue(AVKey.TILE_URL_BUILDER, new URLBuilder());
return new LevelSet(params);
}
private static class URLBuilder implements TileUrlBuilder {
public URL getURL( Tile tile, String imageFormat ) throws MalformedURLException {
int zoom = tile.getLevelNumber() + 3;
int x = tile.getColumn();
int y = (1 << (tile.getLevelNumber()) + 3) - 1 - tile.getRow();
return new URL(tile.getLevel().getService() + zoom + "/" + x + "/" + y + ".png");
}
}
@Override
public String toString() {
return "OpenStreetMap";
}
}