Ignore:
Timestamp:
2015-12-13T01:06:16+01:00 (10 years ago)
Author:
bastiK
Message:

add support for proj.4 parameter +pm=* - prime meridian (see #12186)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java

    r8846 r9105  
    3838    private static final double METER_PER_UNIT_DEGREE = 2 * Math.PI * 6370997 / 360;
    3939    private static final Map<String, Double> UNITS_TO_METERS = getUnitsToMeters();
     40    private static final Map<String, Double> PRIME_MERIDANS = getPrimeMeridians();
    4041
    4142    /**
     
    6465        /** Central meridian */
    6566        lon_0("lon_0", true),
     67        /** Prime meridian */
     68        pm("pm", true),
    6669        /** Scaling factor */
    6770        k_0("k_0", true),
     
    222225                this.lon0 = parseAngle(s, Param.lon_0.key);
    223226            }
     227            s = parameters.get(Param.pm.key);
     228            if (s != null) {
     229                if (PRIME_MERIDANS.containsKey(s)) {
     230                    this.pm = PRIME_MERIDANS.get(s);
     231                } else {
     232                    this.pm = parseAngle(s, Param.pm.key);
     233                }
     234            }
    224235            s = parameters.get(Param.k_0.key);
    225236            if (s != null) {
     
    626637        return ret;
    627638    }
     639
     640    private static Map<String, Double> getPrimeMeridians() {
     641        Map<String, Double> ret = new ConcurrentHashMap<>();
     642        try {
     643            ret.put("greenwich", 0.0);
     644            ret.put("lisbon", parseAngle("9d07'54.862\"W", null));
     645            ret.put("paris", parseAngle("2d20'14.025\"E", null));
     646            ret.put("bogota", parseAngle("74d04'51.3\"W", null));
     647            ret.put("madrid", parseAngle("3d41'16.58\"W", null));
     648            ret.put("rome", parseAngle("12d27'8.4\"E", null));
     649            ret.put("bern", parseAngle("7d26'22.5\"E", null));
     650            ret.put("jakarta", parseAngle("106d48'27.79\"E", null));
     651            ret.put("ferro", parseAngle("17d40'W", null));
     652            ret.put("brussels", parseAngle("4d22'4.71\"E", null));
     653            ret.put("stockholm", parseAngle("18d3'29.8\"E", null));
     654            ret.put("athens", parseAngle("23d42'58.815\"E", null));
     655            ret.put("oslo", parseAngle("10d43'22.5\"E", null));
     656        } catch (ProjectionConfigurationException ex) {
     657            throw new RuntimeException();
     658        }
     659        return ret;
     660    }
    628661}
Note: See TracChangeset for help on using the changeset viewer.