001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.data.projection; 003 004 import org.openstreetmap.josm.data.Bounds; 005 import org.openstreetmap.josm.data.coor.EastNorth; 006 import org.openstreetmap.josm.data.coor.LatLon; 007 008 /** 009 * A projection, i.e. a class that supports conversion from lat/lon 010 * to east/north and back. 011 * 012 * The conversion from east/north to the screen coordinates is simply a scale 013 * factor and x/y offset. 014 */ 015 public interface Projection { 016 /** 017 * The default scale factor in east/north units per pixel ({@link #NavigatableComponent#scale})). 018 * FIXME: misnomer 019 * @return the scale factor 020 */ 021 double getDefaultZoomInPPD(); 022 023 /** 024 * Convert from lat/lon to easting/northing. 025 * 026 * @param ll the geographical point to convert (in WGS84 lat/lon) 027 * @return the corresponding east/north coordinates 028 */ 029 EastNorth latlon2eastNorth(LatLon ll); 030 031 /** 032 * Convert from easting/norting to lat/lon. 033 * 034 * @param en the geographical point to convert (in projected coordinates) 035 * @return the corresponding lat/lon (WGS84) 036 */ 037 LatLon eastNorth2latlon(EastNorth en); 038 039 /** 040 * Describe the projection in one or two words. 041 * @return the name / description 042 */ 043 String toString(); 044 045 /** 046 * Return projection code. 047 * 048 * This should be a unique identifier. 049 * If projection supports parameters, return a different code 050 * for each set of parameters. 051 * 052 * The EPSG code can be used (if defined for the projection). 053 * 054 * @return the projection identifier 055 */ 056 String toCode(); 057 058 /** 059 * Get a filename compatible string (for the cache directory). 060 * @return the cache directory name (base name) 061 */ 062 String getCacheDirectoryName(); 063 064 /** 065 * Get the bounds of the world. 066 * @return the supported lat/lon rectangle for this projection 067 */ 068 Bounds getWorldBoundsLatLon(); 069 }