package com.androidol.map.schema; import com.androidol.basetypes.Size; import com.androidol.proj4j.map.proj.ProjectionFactory; import com.androidol.projection.Projection; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Point; public class OSMMapSchema implements MapSchema { public static double[] SCALES = { 5.916590302988535E8, 2.9582951514942676E8, 1.4791475757471338E8, 7.395737878735669E7, 3.6978689393678345E7, 1.8489344696839172E7, 9244672.348419586, 4622336.174209793, 2311168.0871048965, 1155584.0435524483, 577792.0217762241, 288896.01088811207, 144448.00544405603, 72224.00272202802, 36112.00136101401, 18056.000680507004, 9028.000340253502, 4514.000170126751, 2257.0000850633755, }; public static double[] RESOLUTIONS = { 156543.0339, 78271.51695, 39135.758475, 19567.8792375, 9783.93961875, 4891.969809375, 2445.9849046875, 1222.99245234375, 611.496226171875, 305.7481130859375, 152.87405654296876, 76.43702827148438, 38.21851413574219, 19.109257067871095, 9.554628533935547, 4.777314266967774, 2.388657133483887, 1.1943285667419434, 0.5971642833709717, }; public static int NUM_ZOOM_LEVELS = 19; public static int MAX_ZOOM_LEVEL = 18; public static int MIN_ZOOM_LEVEL = 1; public static double MAX_RESOLUTION = RESOLUTIONS[0]; public static double MIN_RESOLUTION = RESOLUTIONS[NUM_ZOOM_LEVELS-1]; public static double MAX_SCALE = SCALES[0]; public static double MIN_SCALE = SCALES[NUM_ZOOM_LEVELS-1]; public static int DPI = 96; public static String PROJECTION = "epsg:3785"; // mercator auxiliary?? public static String UNITS = "meters"; public static Envelope DEFAULT_MAX_EXTENT = new Envelope(-20037508.3392, 20037508.3392, -20037508.3392, 20037508.3392); public static Envelope DEFAULT_MIN_EXTENT = null; public static Coordinate DEFAULT_CENTER = new Coordinate(0.0, 0.0); public static int DEFAULT_ZOOM_LEVEL = 3; public static double DEFAULT_RESOLUTION = RESOLUTIONS[DEFAULT_ZOOM_LEVEL]; public static double DEFAULT_SCALE = SCALES[DEFAULT_ZOOM_LEVEL]; @Override public int getDpi() { return DPI; } @Override public double getMaxResolution() { return MAX_RESOLUTION; } @Override public double getMaxScale() { return MAX_SCALE; } @Override public int getMaxZoomLevel() { return MAX_ZOOM_LEVEL; } @Override public double getMinResolution() { return MIN_RESOLUTION; } @Override public double getMinScale() { return MIN_SCALE; } @Override public int getMinZoomLevel() { return MIN_ZOOM_LEVEL; } @Override public int getNumZoomLevels() { return NUM_ZOOM_LEVELS; } @Override public String getProjection() { return PROJECTION; } @Override public double[] getResolutions() { return RESOLUTIONS; } @Override public double[] getScales() { return SCALES; } @Override public String getUnits() { return UNITS; } @Override public Envelope getDefaultMaxExtent() { return DEFAULT_MAX_EXTENT; } @Override public Envelope getDefaultMinExtent() { return DEFAULT_MIN_EXTENT; } @Override public Coordinate getDefaultCenter() { //return DEFAULT_CENTER; /* // old projection library Point portland = Projection.wgs84ToSphericalMercator(-122.838493, 45.432976); // zoom to portland // proj4j projection library Point portland = (ProjectionFactory.getNamedPROJ4CoordinateSystem("epsg:3785")).transform(-122.838493, 45.432976); // Mercator return new Coordinate(portland.getX(), portland.getY()); */ // old projection library //Point rancho_cucamonga = Projection.wgs84ToSphericalMercator(-117.5931084, 34.1063989); // zoom to Rancho Cucamonga // proj4j projection library Point rancho_cucamonga = (ProjectionFactory.getNamedPROJ4CoordinateSystem(PROJECTION)).transform(-117.5931084, 34.1063989); // Mercator return new Coordinate(rancho_cucamonga.getX(), rancho_cucamonga.getY()); } @Override public int getDefaultZoomLevel() { return DEFAULT_ZOOM_LEVEL; } @Override public double getDefaultScale() { return DEFAULT_SCALE; } @Override public double getDefaultResolution() { return DEFAULT_RESOLUTION; } }