Ticket #3581: puwg.diff

File puwg.diff, 11.7 KB (added by steelman, 15 years ago)

Polish official coordinate systems.

  • src/org/openstreetmap/josm/data/projection/Epsg2180.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 1992 is the official cordinate system in Poland.
     15 *
     16 * @author steelman
     17 */
     18public class Epsg2180 extends Puwg implements Projection {
     19
     20    final private double Epsg2180FalseEasting = 500000.0; /* y */
     21    final private double Epsg2180FalseNorthing = -5300000.0; /* x */
     22    final private double Epsg2180ScaleFactor = 0.9993;
     23    final private double Epsg2180CentralMeridian = 19.0;
     24    private static DecimalFormat decFormatter = new DecimalFormat("###0");
     25
     26    @Override public String toString() {
     27        return tr("PUWG 1992 (Poland)");
     28    }
     29
     30    public String toCode() {
     31        return "EPSG:2180";
     32    }
     33
     34    public String getCacheDirectoryName() {
     35        return "epsg2180";
     36    }
     37
     38    public Bounds getWorldBoundsLatLon()
     39    {
     40        return new Bounds(
     41                new LatLon(49.00, 14.12),
     42                new LatLon(54.84, 24.15));
     43    }
     44
     45    public double getPuwgCentralMeridianDeg() { return Epsg2180CentralMeridian; }
     46    public double getPuwgCentralMeridian() { return Math.toRadians(Epsg2180CentralMeridian); }
     47    public double getPuwgFalseEasting() { return Epsg2180FalseEasting; }
     48    public double getPuwgFalseNorthing() { return Epsg2180FalseNorthing; }
     49    public double getPuwgScaleFactor() { return Epsg2180ScaleFactor; }
     50
     51    public double getDefaultZoomInPPD() {
     52        // This will set the scale bar to about 100 km
     53        return 0.009;
     54    }
     55
     56    public String eastToString(EastNorth p) {
     57        return decFormatter.format(p.east());
     58    }
     59
     60    public String northToString(EastNorth p) {
     61        return decFormatter.format(p.north());
     62    }
     63}
  • src/org/openstreetmap/josm/data/projection/Projection.java

     
    2525        new Mercator(),
    2626        new LambertEST(), // Still needs proper default zoom
    2727        new Lambert(),    // Still needs proper default zoom
     28        new Epsg2176(),
     29        new Epsg2177(),
     30        new Epsg2178(),
     31        new Epsg2179(),
     32        new Epsg2180(),
    2833        new SwissGrid(),
    2934        new UTM(),
    3035        new UTM_20N_Guadeloupe_Ste_Anne(),
  • src/org/openstreetmap/josm/data/projection/Epsg2176.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 2000 Zone 5
     15 *
     16 * @author steelman
     17 */
     18public class Epsg2176 extends Puwg2000 implements Projection {
     19    final private int PuwgZone = 5;
     20
     21    public int getZone() { return PuwgZone; }
     22}
  • src/org/openstreetmap/josm/data/projection/Epsg2177.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 2000 Zone 6
     15 *
     16 * @author steelman
     17 */
     18public class Epsg2177 extends Puwg2000 implements Projection {
     19    final private int PuwgZone = 6;
     20
     21    public int getZone() { return PuwgZone; }
     22}
  • src/org/openstreetmap/josm/data/projection/Epsg2178.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 2000 Zone 7
     15 *
     16 * @author steelman
     17 */
     18public class Epsg2178 extends Puwg2000 implements Projection {
     19    final private int PuwgZone = 7;
     20
     21    public int getZone() { return PuwgZone; }
     22}
  • src/org/openstreetmap/josm/data/projection/Epsg2179.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 2000 Zone 8
     15 *
     16 * @author steelman
     17 */
     18public class Epsg2179 extends Puwg2000 implements Projection {
     19    final private int PuwgZone = 8;
     20
     21    public int getZone() { return PuwgZone; }
     22}
  • src/org/openstreetmap/josm/data/projection/Puwg.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 1992 and 2000 are the official cordinate systems in Poland.
     15 * They use the same math as UTM only with different constants.
     16 *
     17 * @author steelman
     18 */
     19public abstract class Puwg extends UTM implements Projection {
     20
     21    private static DecimalFormat decFormatter = new DecimalFormat("###0");
     22
     23    public EastNorth latlon2eastNorth(LatLon p) {
     24        double easting = getPuwgFalseEasting();
     25        double northing = getPuwgFalseNorthing();
     26        double scale = getPuwgScaleFactor();
     27        double center = getPuwgCentralMeridian(); /* in radians */
     28        EastNorth a = MapLatLonToXY(Math.toRadians(p.lat()), Math.toRadians(p.lon()), center);
     29        return new EastNorth(a.east() * scale + easting, a.north() * scale + northing);
     30    }
     31
     32    public LatLon eastNorth2latlon(EastNorth p) {
     33        double easting = getPuwgFalseEasting();
     34        double northing = getPuwgFalseNorthing();
     35        double scale = getPuwgScaleFactor();
     36        double center = getPuwgCentralMeridian(); /* in radians */
     37        return MapXYToLatLon((p.east() - easting)/scale, (p.north() - northing)/scale, center);
     38    }
     39
     40    @Override public abstract String toString();
     41    public abstract String toCode();
     42    public abstract String getCacheDirectoryName();
     43    public abstract Bounds getWorldBoundsLatLon();
     44
     45    public abstract double getPuwgCentralMeridianDeg();
     46    public abstract double getPuwgCentralMeridian();
     47    public abstract double getPuwgFalseNorthing();
     48    public abstract double getPuwgFalseEasting();
     49    public abstract double getPuwgScaleFactor();
     50
     51    public double getDefaultZoomInPPD() {
     52        // This will set the scale bar to about 100 km
     53        return 0.009;
     54    }
     55
     56    public String eastToString(EastNorth p) {
     57        return decFormatter.format(p.east());
     58    }
     59
     60    public String northToString(EastNorth p) {
     61        return decFormatter.format(p.north());
     62    }
     63}
  • src/org/openstreetmap/josm/data/projection/Puwg2000.java

     
     1// License: GPL. Copyright 2007 by Immanuel Scholz and others
     2//                         2009 by Łukasz Stelmach
     3package org.openstreetmap.josm.data.projection;
     4
     5import java.text.DecimalFormat;
     6
     7import static org.openstreetmap.josm.tools.I18n.tr;
     8
     9import org.openstreetmap.josm.data.Bounds;
     10import org.openstreetmap.josm.data.coor.EastNorth;
     11import org.openstreetmap.josm.data.coor.LatLon;
     12
     13/**
     14 * PUWG 2000 is the official cordinate system in Poland.
     15 *
     16 * @author steelman
     17 */
     18public abstract class Puwg2000 extends Puwg implements Projection {
     19
     20    final private double PuwgFalseEasting = 500000.0;
     21    final private double PuwgFalseNorthing = 0;
     22    final private double PuwgScaleFactor = 0.999923;
     23    final private double[] Puwg2000CentralMeridian = {15.0, 18.0, 21.0, 24.0};
     24    final private String[] Puwg2000Code = { "EPSG:2176",  "EPSG:2177", "EPSG:2178", "EPSG:2179"};
     25    final private String[] Puwg2000CDName = { "epsg2176",  "epsg2177", "epsg2178", "epsg2179"};
     26    private static DecimalFormat decFormatter = new DecimalFormat("###0.00");
     27
     28    @Override public String toString() {
     29        return tr("PUWG 2000 Zone {0} (Poland)", Integer.toString(getZone()));
     30    }
     31
     32    public String toCode() {
     33        return Puwg2000Code[getZoneIndex()];
     34    }
     35
     36    public String getCacheDirectoryName() {
     37        return Puwg2000CDName[getZoneIndex()];
     38    }
     39
     40    public Bounds getWorldBoundsLatLon()
     41    {
     42        return new Bounds(
     43                new LatLon(49.00, (3 * getZone()) - 1.5),
     44                new LatLon(54.84, (3 * getZone()) + 1.5));
     45    }
     46
     47    public double getPuwgCentralMeridianDeg() { return getZone() * 3.0; }
     48    public double getPuwgCentralMeridian() { return Math.toRadians(getZone() * 3.0); }
     49    public double getPuwgFalseNorthing() { return PuwgFalseNorthing;}
     50    public double getPuwgFalseEasting() { return 1e6 * getZone() + PuwgFalseEasting; }
     51    public double getPuwgScaleFactor() { return PuwgScaleFactor; }
     52    public abstract int getZone();
     53
     54    public int getZoneIndex() { return getZone() - 5; }
     55
     56    public double getDefaultZoomInPPD() {
     57        // This will set the scale bar to about 100 km
     58        return 0.009;
     59    }
     60
     61    public String eastToString(EastNorth p) {
     62        return Integer.toString(getZone()) + decFormatter.format(p.east());
     63    }
     64
     65    public String northToString(EastNorth p) {
     66        return decFormatter.format(p.north());
     67    }
     68
     69}