Project

General

Profile

« Previous | Next » 

Revision 8c4bbd4f

Added by Niels Hoffmann over 13 years ago

UTF8 for Coordinate Conversion

View differences:

cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/location/Point.java
139 139
	public static final class CoordinateParser {
140 140
		 
141 141
	    /**
142
	     * Pattern zum parsen von Sexagesimalen Grad: 145?
142
	     * Pattern zum parsen von Sexagesimalen Grad: 145°
143 143
	     */
144
	    private static final String DEGREE_REGEX = "([0-9]*)?";
144
	    private static final String DEGREE_REGEX = "([0-9]*)\u00B0";
145 145
	    /**
146 146
	     * Pattern zum parsen von Sexagesimalen Minuten: 65'
147 147
	     */
......
151 151
	     */
152 152
	    private static final String SECONDS_REGEX = "(?:([0-9]*)(?:''|\"))?";
153 153
	    /**
154
	     * Himmelsrichtung L?ngengrad
154
	     * Himmelsrichtung Längengrad
155 155
	     */
156 156
	    private static final String LONGITUDE_DIRECTION_REGEX = "([OEW])";
157 157
	    /**
......
167 167
	                    + LATITUDE_DIRECTION_REGEX);
168 168
	 
169 169
	    /**
170
	     * Pattern zum Parsen von L?ngengraden.
170
	     * Pattern zum Parsen von Längengraden.
171 171
	     */
172 172
	    private static final Pattern LONGITUDE_PATTERN = Pattern
173 173
	            .compile(DEGREE_REGEX + MINUTES_REGEX + SECONDS_REGEX
......
179 179
	 
180 180
	    /**
181 181
	     * Parst einen Breitengrad der Form<br>
182
	     * G?M'S""(OEW)<br>
182
	     * G°M'S""(OEW)<br>
183 183
	     * Die Formen<br>
184
	     * G?(OEW)<br>
185
	     * G?M'(OEW)<br>
184
	     * G°(OEW)<br>
185
	     * G°M'(OEW)<br>
186 186
	     * sind ebenfalls erlaubt.
187 187
	     *
188 188
	     * @param strg
......
196 196
	    }
197 197
	 
198 198
	    /**
199
	     * Parst einen L?ngengrad der Form<br>
200
	     * G?M'S"(NS)<br>
199
	     * Parst einen Längengrad der Form<br>
200
	     * G°M'S"(NS)<br>
201 201
	     * Die Formen<br>
202
	     * G?(NS)<br>
203
	     * G?M'(NS)<br>
202
	     * G°(NS)<br>
203
	     * G°M'(NS)<br>
204 204
	     * sind ebenfalls erlaubt.
205 205
	     *
206 206
	     * @param strg
......
334 334
			            }
335 335
		        }
336 336
		 
337
		        // Decimal in ?'" umrechnen
337
		        // Decimal in \u00B0'" umrechnen
338 338
		        double d = Math.abs(decimalDegree);
339 339
		        d += HALF_SECOND; // add a second for rounding
340 340
		        sexagesimal.degree = (int) Math.floor(d);
......
371 371
		}
372 372
		public String toString(boolean includeEmptySeconds){
373 373
			String result;
374
			result = String.valueOf(CdmUtils.Nz(degree)) + "?";
374
			result = String.valueOf(CdmUtils.Nz(degree)) + "\u00B0";
375 375
			if (seconds != null || minutes != null){
376 376
				result += String.valueOf(CdmUtils.Nz(minutes)) + "'";
377 377
			}
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/parser/location/CoordinateConverter.java
73 73
        patterns.add(pattern);
74 74

  
75 75

  
76
        //Variations of DD(?|d)MM.MMM' with whitespace characters
76
        //Variations of DD(\u00B0|d)MM.MMM' with whitespace characters
77 77
        pattern = new CoordinatePattern();
78
        pattern.description = "Variation of DD(?|d)MM.MMM('|m)";
78
        pattern.description = "Variation of DD(\u00B0|d)MM.MMM('|m)";
79 79
        pattern.pattern =
80 80
            "(^" +
81 81
            "(\\s)*(\\+|-|W|w|E|e|N|n|S|s)?(\\s)*" +
82
            "((\\d{1,3}(\\s)*(?|?|D|d)?(\\s)*$)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\.|\\,)?(\u02B9|'|M|m)?$)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02B9|'|M|m)?(\\s)*$))" +
82
            "((\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)?(\\s)*$)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\.|\\,)?(\u02B9|'|M|m)?$)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02B9|'|M|m)?(\\s)*$))" +
83 83
            ")" +
84 84
            "|(^" +
85
            "(\\s)*((\\d{1,3}(\\s)*(?|?|D|d)?(\\s)*)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\.|\\,)?(\u02B9|'|M|m)?)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02B9|'|M|m)?(\\s)*))" +
85
            "(\\s)*((\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)?(\\s)*)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\.|\\,)?(\u02B9|'|M|m)?)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02B9|'|M|m)?(\\s)*))" +
86 86
            "(W|w|E|e|N|n|S|s)?(\\s)*$" +
87 87
            ")";
88 88
        patterns.add(pattern);
89 89

  
90 90

  
91
        //Variations of DD?MM'SS.SSS" with whitespace characters
91
        //Variations of DD\u00B0MM'SS.SSS" with whitespace characters
92 92
        pattern = new CoordinatePattern();
93
        pattern.description = "Variation of DD(?|d)MM(\u02B9|m)SS.SSS(\u02BA|s)";
93
        pattern.description = "Variation of DD(\u00B0|d)MM(\u02B9|m)SS.SSS(\u02BA|s)";
94 94
        pattern.pattern =
95
            //+/-/Nn/Ss/Ww/EeDD?MM\u02B9SS.SSS
95
            //+/-/Nn/Ss/Ww/EeDD\u00B0MM\u02B9SS.SSS
96 96
            "(^" +
97 97
            "(\\s)*(\\+|-|W|w|E|e|N|n|S|s)?(\\s)*" +
98
            "((\\d{1,3}(\\s)*(?|?|D|d)?(\\s)*$)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)?(\\s)*$)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)?(\\s)*(\u02BA|\"|''|S|s)?(\\s)*$)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02BA|\"|''|S|s)?(\\s)*$))" +
98
            "((\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)?(\\s)*$)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)?(\\s)*$)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)?(\\s)*(\u02BA|\"|''|S|s)?(\\s)*$)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02BA|\"|''|S|s)?(\\s)*$))" +
99 99
            ")" +
100
            //DD?MM\u02B9SS.SSSNn/Ss/Ww/Ee
100
            //DD°MM\u02B9SS.SSSNn/Ss/Ww/Ee
101 101
            "|(^" +
102
            "(\\s)*((\\d{1,3}(\\s)*(?|?|D|d)?(\\s)*)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)?(\\s)*)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)?(\\s)*(\u02BA|\"|''|S|s)?(\\s)*)|(\\d{1,3}(\\s)*(?|?|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02BA|\"|''|S|s)?(\\s)*))" +
102
            "(\\s)*((\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)?(\\s)*)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)?(\\s)*)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)?(\\s)*(\u02BA|\"|''|S|s)?(\\s)*)|(\\d{1,3}(\\s)*(\u00B0|\u00BA|D|d)(\\s)*\\d{1,2}(\\s)*(\u02B9|'|M|m)(\\s)*\\d{1,2}(\\.|\\,)\\d+(\\s)*(\u02BA|\"|''|S|s)?(\\s)*))" +
103 103
            "(W|w|E|e|N|n|S|s)?(\\s)*$" +
104 104
            ")";
105 105
        patterns.add(pattern);
......
436 436
            checkDegreeRange(dd, results);
437 437
            doConvertWithCheck(sign, dd, mm, mmm, ss, sss, results);
438 438

  
439
        }else if (pattern.description.equals("Variation of DD(?|d)MM.MMM('|m)")){
439
        }else if (pattern.description.equals("Variation of DD(\u00B0|d)MM.MMM('|m)")){
440 440

  
441 441
        	//Sets pattern machted, successful, pattern type and pattern info
442 442
        	initializeResult(results, pattern);
......
454 454

  
455 455
            //do some further replacing
456 456
            //Replace degree symbol
457
            str = str.replaceAll("(?|?|D|d)", ":");
457
            str = str.replaceAll("(\u00B0|\u00B0|D|d)", ":");
458 458
            
459 459
            //remove minute symbol
460 460
            str = str.replaceAll("(\u02B9|'|M|m)", "");
......
486 486
            checkDegreeRange(dd, results);
487 487
            checkMinuteRange(mm, results);
488 488
            doConvertWithCheck(sign, dd, mm, mmm, ss, sss, results);
489
         	
490
        }else if (pattern.description.equals("Variation of DD(?|d)MM(\u02B9|m)SS.SSS(\u02BA|s)")){
489
            
490
        }else if (pattern.description.equals("Variation of DD(\u00B0|d)MM(\u02B9|m)SS.SSS(\u02BA|s)")){
491 491
        	
492 492
        	/* 
493 493
             * Note:
......
521 521
            
522 522
            //do some further replacing
523 523
            //Replace degree symbol
524
            str = str.replaceAll("(?|?|D|d|\u02B9|'|M|m)",":");
524
            str = str.replaceAll("(\u00B0|\u00B0|D|d|\u02B9|'|M|m)",":");
525 525

  
526 526
            //Extract decimal part
527 527
            decimalBit = str.split(decSeparatorRegEx);
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java
391 391
	public void testSetExactLocationByParsing(){
392 392
		Point point1;
393 393
		try {
394
			specimenFacade.setExactLocationByParsing("11°34'20\"W", "34°30,34'N", null, null);
394
			specimenFacade.setExactLocationByParsing("112\u00B034'20\"W", "34\u00B030,34'N", null, null);
395 395
			point1 = specimenFacade.getExactLocation();
396 396
			Assert.assertNotNull("", point1.getLatitude());
397 397
			System.out.println(point1.getLatitude().toString());

Also available in: Unified diff