Ignore:
Timestamp:
2013-03-03T13:47:40+01:00 (12 years ago)
Author:
donvip
Message:

[josm_pro4j] update to rev. 2285

Location:
applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/Registry.java

    r27902 r29325  
    1919  public Registry() {
    2020    super();
     21    initialize();
    2122  }
    2223
     
    111112
    112113  public Projection getProjection( String name ) {
    113     if ( projRegistry == null )
    114       initialize();
     114//    if ( projRegistry == null )
     115//      initialize();
    115116    Class cls = (Class)projRegistry.get( name );
    116117    if ( cls != null ) {
     
    131132  }
    132133 
    133   private void initialize() {
     134  private synchronized void initialize() {
     135    // guard against race condition
     136    if (projRegistry != null)
     137      return;
    134138    projRegistry = new HashMap();
    135139    register( "aea", AlbersProjection.class, "Albers Equal Area" );
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/parser/ParameterUtil.java

    r26409 r29325  
    11package org.osgeo.proj4j.parser;
    22
     3import org.osgeo.proj4j.units.Angle;
    34import org.osgeo.proj4j.units.AngleFormat;
    45
     
    78  public static final AngleFormat format = new AngleFormat( AngleFormat.ddmmssPattern, true );
    89
     10  /**
     11   *
     12   * @param s
     13   * @return
     14   * @deprecated
     15   * @see Angle#parse(String)
     16   */
    917  public static double parseAngle( String s ) {
    1018    return format.parse( s, null ).doubleValue();
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/parser/Proj4Keyword.java

    r26409 r29325  
    5454  private static Set<String> supportedParams = null;
    5555 
    56   public static Set supportedParameters()
     56  public static synchronized Set supportedParameters()
    5757  {
    5858    if (supportedParams == null) {
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/parser/Proj4Parser.java

    r27902 r29325  
    55
    66import org.osgeo.proj4j.*;
    7 import org.osgeo.proj4j.Registry;
    87import org.osgeo.proj4j.datum.Datum;
    98import org.osgeo.proj4j.datum.Ellipsoid;
    109import org.osgeo.proj4j.proj.Projection;
    1110import org.osgeo.proj4j.proj.TransverseMercatorProjection;
     11import org.osgeo.proj4j.units.Angle;
    1212import org.osgeo.proj4j.units.AngleFormat;
    1313import org.osgeo.proj4j.units.Unit;
    1414import org.osgeo.proj4j.units.Units;
     15import org.osgeo.proj4j.util.ProjectionMath;
    1516
    1617public class Proj4Parser
    1718{
    18   /* SECONDS_TO_RAD = Pi/180/3600 */
    19   private static final double SECONDS_TO_RAD = 4.84813681109535993589914102357e-6;
    20   private static final double MILLION = 1000000.0;
    21  
    2219  private Registry registry;
    2320 
     
    4441    return new CoordinateReferenceSystem(name, args, datum, proj);
    4542  }
    46 
    47   /*
    4843 
    49   // not currently used
    50  private final static double SIXTH = .1666666666666666667; // 1/6
    51  private final static double RA4 = .04722222222222222222; // 17/360
    52  private final static double RA6 = .02215608465608465608; // 67/3024
    53  private final static double RV4 = .06944444444444444444; // 5/72
    54  private final static double RV6 = .04243827160493827160; // 55/1296
    55  */
    56 
    57  private static AngleFormat format = new AngleFormat( AngleFormat.ddmmssPattern, true );
    58 
    5944 /**
    6045  * Creates a {@link Projection}
     
    7358
    7459   projection.setEllipsoid(ellipsoid);
    75 
    76    // not sure what CSes use this??
    77    /*
    78    s = (String)params.get( "init" );
    79    if ( s != null ) {
    80      projection = createFromName( s ).getProjection();
    81      if ( projection == null )
    82        throw new ProjectionException( "Unknown projection: "+s );
    83            a = projection.getEquatorRadius();
    84            es = projection.getEllipsoid().getEccentricitySquared();
    85    }
    86    */
    87    
    8860   
    8961   //TODO: better error handling for things like bad number syntax. 
    9062   // Should be able to report the original param string in the error message
    91    // Also should the exception be lib specific?  (Say ParseException)
    92    
    93    // Other parameters
    94 //   projection.setProjectionLatitudeDegrees( 0 );
    95 //   projection.setProjectionLatitude1Degrees( 0 );
    96 //   projection.setProjectionLatitude2Degrees( 0 );
     63   // Should the exception be lib-specific?  (e.g. ParseException)
     64   
    9765   s = (String)params.get( Proj4Keyword.alpha );
    9866   if ( s != null )
     
    158126   // this must be done last, since behaviour depends on other params being set (eg +south)
    159127   if (projection instanceof TransverseMercatorProjection) {
    160      s = (String) params.get("zone");
     128     s = (String) params.get(Proj4Keyword.zone);
    161129     if (s != null)
    162130       ((TransverseMercatorProjection) projection).setUTMZone(Integer
     
    199167     param[i] = Double.parseDouble(numStr[i]);
    200168   }
    201    
    202    // optimization to detect 3-parameter transform
    203    if (param[3] == 0.0
    204        && param[4] == 0.0
    205        && param[5] == 0.0
    206        && param[6] == 0.0
    207        ) {
    208      param = new double[] { param[0], param[1], param[2] };
     169   if (param.length > 3) {
     170     // optimization to detect 3-parameter transform
     171     if (param[3] == 0.0
     172         && param[4] == 0.0
     173         && param[5] == 0.0
     174         && param[6] == 0.0
     175         ) {
     176       param = new double[] { param[0], param[1], param[2] };
     177     }
    209178   }
    210179   
     
    216185    */
    217186   if (param.length > 3) {
    218      param[3] *= SECONDS_TO_RAD;
    219      param[4] *= SECONDS_TO_RAD;
    220      param[5] *= SECONDS_TO_RAD;
    221      param[6] = (param[6]/MILLION) + 1;
     187     param[3] *= ProjectionMath.SECONDS_TO_RAD;
     188     param[4] *= ProjectionMath.SECONDS_TO_RAD;
     189     param[5] *= ProjectionMath.SECONDS_TO_RAD;
     190     param[6] = (param[6]/ProjectionMath.MILLION) + 1;
    222191   }
    223192   
     
    328297   for (int i = 0; i < args.length; i++) {
    329298     String arg = args[i];
     299     // strip leading "+" if any
    330300     if (arg.startsWith("+")) {
    331        int index = arg.indexOf('=');
    332        if (index != -1) {
    333          // params of form +pppp=vvvv
    334          String key = arg.substring(1, index);
    335          String value = arg.substring(index + 1);
    336          params.put(key, value);
    337        } else {
    338          // params of form +ppppp
    339          String key = arg.substring(1);
    340          params.put(key, null);
    341        }
     301       arg = arg.substring(1);
    342302     }
     303     int index = arg.indexOf('=');
     304     if (index != -1) {
     305       // param of form pppp=vvvv
     306       String key = arg.substring(0, index);
     307       String value = arg.substring(index + 1);
     308       params.put(key, value);
     309     } else {
     310       // param of form ppppp
     311       //String key = arg.substring(1);
     312       params.put(arg, null);
     313     }
    343314   }
    344315   return params;
     
    346317
    347318 private static double parseAngle( String s ) {
    348    return format.parse( s, null ).doubleValue();
     319   return Angle.parse(s);
    349320 }
    350321
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/proj/RobinsonProjection.java

    r26409 r29325  
    5757                0.372,  0.0123598,      -1.3935e-05,    4.39588e-06,
    5858                0.434,  0.0125501,      5.20034e-05,    -1.00051e-05,
    59                 0.4968, 0.0123198,      -9.80735e-05,   9.22397e-06,
     59                0.4958, 0.0123198,      -9.80735e-05,   9.22397e-06,
    6060                0.5571, 0.0120308,      4.02857e-05,    -5.2901e-06,
    6161                0.6176, 0.0120369,      -3.90662e-05,   7.36117e-07,
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/proj/SimpleConicProjection.java

    r26409 r29325  
    6464                        break;
    6565                case PCONIC:
    66                         rho = c2 * (c1 - Math.tan(lpphi));
     66                        rho = c2 * (c1 - Math.tan(lpphi - sig));
    6767                        break;
    6868                default:
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/proj/SineTangentSeriesProjection.java

    r26409 r29325  
    6161                c = Math.cos(lp.y = tan_mode ? Math.atan(xyy) : ProjectionMath.asin(xyy));
    6262                lp.y /= C_p;
    63                 lp.x = xyx / (C_x * Math.cos(lp.y /= C_p));
     63    lp.x = xyx / (C_x * Math.cos(lp.y));
    6464                if (tan_mode)
    6565                        lp.x /= c * c;
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/proj/StereographicAzimuthalProjection.java

    r26409 r29325  
    213213                                cosphi = Math.cos( tp = 2. * Math.atan2(rho * cosphi0 , akm1) );
    214214                                sinphi = Math.sin(tp);
    215                                 phi_l = Math.asin(cosphi * sinphi0 + (y * sinphi * cosphi0 / rho));
     215                                if (rho <= 0) {
     216                                  phi_l = Math.asin(cosphi * sinphi0);
     217                                }
     218                                else {
     219                                  phi_l = Math.asin(cosphi * sinphi0 + (y * sinphi * cosphi0 / rho));
     220                                }
    216221                                tp = Math.tan(.5 * (ProjectionMath.HALFPI + phi_l));
    217222                                x *= sinphi;
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/proj/TransverseMercatorProjection.java

    r27902 r29325  
    8888        }
    8989
    90         public int getRowFromNearestParallel(double latitude) {
     90        public static int getRowFromNearestParallel(double latitude) {
    9191                int degrees = (int)ProjectionMath.radToDeg(ProjectionMath.normalizeLatitude(latitude));
    9292                if (degrees < -80 || degrees > 84)
     
    9797        }
    9898       
    99         public int getZoneFromNearestMeridian(double longitude) {
     99        public static int getZoneFromNearestMeridian(double longitude) {
    100100                int zone = (int)Math.floor((ProjectionMath.normalizeLongitude(longitude) + Math.PI) * 30.0 / Math.PI) + 1;
    101101                if (zone < 1)
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/units/AngleFormat.java

    r26409 r29325  
    2828 */
    2929public class AngleFormat extends NumberFormat {
     30
     31  public static final char CH_MIN_SYMBOL = '\'';
     32  public static final String STR_SEC_SYMBOL = "\"";
     33  public static final char CH_DEG_SYMBOL = '\u00b0';
     34  public static final char CH_DEG_ABBREV = 'd';
     35  public static final char CH_MIN_ABBREV = 'm';
     36  public static final String STR_SEC_ABBREV = "s";
     37 
     38  public static final char CH_N = 'N';
     39  public static final char CH_E = 'E';
     40  public static final char CH_S = 'S';
     41  public static final char CH_W = 'W';
    3042
    3143        public final static String ddmmssPattern = "DdM";
     
    108120                        case 'W':
    109121                                if (negative)
    110                                         result.append('W');
     122                                        result.append(CH_W);
    111123                                else
    112                                         result.append('E');
     124                                        result.append(CH_E);
    113125                                break;
    114126                        case 'N':
    115127                                if (negative)
    116                                         result.append('S');
     128                                        result.append(CH_S);
    117129                                else
    118                                         result.append('N');
     130                                        result.append(CH_N);
    119131                                break;
    120132                        default:
     
    126138        }
    127139       
     140  /**
     141   *
     142   * @param s
     143   * @return
     144   * @deprecated
     145   * @see Angle#parse(String)
     146   */
    128147        public Number parse(String text, ParsePosition parsePosition) {
    129148                double d = 0, m = 0, s = 0;
  • applications/editors/josm/plugins/proj4j/src/org/osgeo/proj4j/util/ProjectionMath.java

    r27902 r29325  
    473473                return nf*Math.pow(10., expv);
    474474        }
     475
     476  /* SECONDS_TO_RAD = Pi/180/3600 */
     477  public static final double SECONDS_TO_RAD = 4.84813681109535993589914102357e-6;
     478  public static final double MILLION = 1000000.0;
    475479}
Note: See TracChangeset for help on using the changeset viewer.