Revision 821

View differences:

org.gvsig.projection.jcrs/trunk/org.gvsig.projection.jcrs/org.gvsig.projection.jcrs.lib/src/main/java/org/gvsig/crs/CrsWkt.java
47 47
import javax.units.Unit;
48 48

  
49 49
import org.apache.commons.lang3.StringUtils;
50
import org.cresques.cts.ICRSFactory;
50 51
import org.gdal.osr.SpatialReference;
51 52
import org.geotools.referencing.CRS;
52 53
import org.geotools.referencing.crs.AbstractSingleCRS;
......
55 56
import org.geotools.referencing.datum.DefaultEllipsoid;
56 57
import org.geotools.referencing.datum.DefaultGeodeticDatum;
57 58
import org.geotools.referencing.datum.DefaultPrimeMeridian;
59
import org.gvsig.fmap.crs.CRSFactory;
58 60
import org.opengis.referencing.FactoryException;
59 61
import org.opengis.referencing.NoSuchAuthorityCodeException;
60 62
import org.opengis.referencing.crs.CoordinateReferenceSystem;
......
102 104
 *
103 105
 */
104 106
    public CrsWkt(SpatialReference spatialReference) {
107
        fromSpatialReference(spatialReference);
108
    }
109
    
110
    private void fromSpatialReference(SpatialReference spatialReference) {
105 111
        wkt = spatialReference.ExportToWkt();
106 112
        projcs = spatialReference.GetAttrValue("PROJCS",0);
107 113
        if(StringUtils.isEmpty(projcs)){
......
235 241
	 * @param isProj
236 242
	 */
237 243
	private void fromWKT(String wkt, boolean isProj) {
238

  
239
		String res = new String();
240
		if(!wkt.startsWith("EPSG:")) {
241
			res = "";
242
			for(; wkt.charAt(contador) != '"'; contador++) {
243
				res += wkt.charAt(contador);
244
			}
245
			if(res.equals("GEOGCS[")) {
246

  
247
				contador++;
248
				for(; wkt.charAt(contador) != '"'; contador++) {
249
					geogcs += wkt.charAt(contador);
250
				}
251

  
252
				res = "";
253
				contador++;
254
				for(; wkt.charAt(contador) != '"'; contador++) {
255
					res += wkt.charAt(contador);
256
				}
257
				if(res.equals(",DATUM[")) {
258
					contador++;
259
					for(; wkt.charAt(contador) != '"'; contador++) {
260
						datum += wkt.charAt(contador);
261
					}
262
				}
263
				res = "";
264
				contador++;
265
				for(; wkt.charAt(contador) != '"'; contador++) {
266
					res += wkt.charAt(contador);
267
				}
268
				if(res.equals(",SPHEROID[")) {
269
					contador++;
270
					for(; wkt.charAt(contador) != ']'; contador++) {
271
						while(wkt.charAt(contador) != '"' ) {
272
							spheroid[0] += wkt.charAt(contador);
273
							contador++;
274
						}
275
						contador +=2;
276
						while(wkt.charAt(contador) != ',') {
277
							spheroid[1] += wkt.charAt(contador);
278
							contador++;
279
						}
280
						contador++;
281
						while(wkt.charAt(contador) != ']') {
282
							spheroid[2] += wkt.charAt(contador);
283
							contador++;
284
						}
285
					}
286
				}
287
				contador++;
288
				res = "";
289
				for(; wkt.charAt(contador) != '"'; contador++) {
290
					res += wkt.charAt(contador);
291
				}
292
				if(res.equals(",PRIMEM[")) {
293
					contador++;
294
					for(; wkt.charAt(contador) != ','; contador++) {
295
						while(wkt.charAt(contador) != '"' ){
296
							primem[0] += wkt.charAt(contador);
297
							contador ++;
298
						}
299
						contador +=2;
300
						while(wkt.charAt(contador) != ']') {
301
							primem[1] += wkt.charAt(contador);
302
							contador ++;
303
						}
304
					}
305
				}
306
				contador++;
307
				res = "";
308
				for(; wkt.charAt(contador) != '"'; contador++) {
309
					res += wkt.charAt(contador);
310
				}
311
				if(res.equals("UNIT[")) {
312
					contador++;
313
					for(; wkt.charAt(contador) != ','; contador++) {
314
						while(wkt.charAt(contador) != '"' ){
315
							unit[0] += wkt.charAt(contador);
316
							contador ++;
317
						}
318
						contador +=2;
319
						while(wkt.charAt(contador) != ']') {
320
							unit[1] += wkt.charAt(contador);
321
							contador ++;
322
						}
323
					}
324
				}
325
				contador++;
326
				res = "";
327
				for(; wkt.charAt(contador) != '"'; contador++) {
328
					res += wkt.charAt(contador);
329
				}
330
				if(res.equals("AUTHORITY[")) {
331
					contador++;
332
					for(; wkt.charAt(contador) != ']'; contador++) {
333
						while(wkt.charAt(contador) != '"' ){
334
							authority[0] += wkt.charAt(contador);
335
							contador ++;
336
						}
337
						contador +=2;
338
						while(wkt.charAt(contador) != ']') {
339
							authority[1] += wkt.charAt(contador);
340
							contador ++;
341
						}
342
					}
343
				}
344
			}else if (res.equals("PROJCS[")) {
345
				contador++;
346
				for(; wkt.charAt(contador) != '"'; contador++) {
347
					projcs += wkt.charAt(contador);
348
				}
349
				contador++;
350
				res = "";
351
				for(; wkt.charAt(contador) != '"'; contador++) {
352
					res += wkt.charAt(contador);
353
				}
354
				if(res.equals(",GEOGCS[")) {
355
					contador++;
356
					for(; wkt.charAt(contador) != '"'; contador++) {
357
						geogcs += wkt.charAt(contador);
358
					}
359
				}
360

  
361
				res = "";
362
				contador++;
363
				for(; wkt.charAt(contador) != '"'; contador++) {
364
					res += wkt.charAt(contador);
365
				}
366
				if(res.equals(",DATUM[")) {
367
					contador++;
368
					for(; wkt.charAt(contador) != '"'; contador++) {
369
						datum += wkt.charAt(contador);
370
					}
371
				}
372
				res = "";
373
				contador++;
374
				for(; wkt.charAt(contador) != '"'; contador++) {
375
					res += wkt.charAt(contador);
376
				}
377
				if(res.equals(",SPHEROID[")) {
378
					contador++;
379
					for(; wkt.charAt(contador) != ']'; contador++) {
380
						while(wkt.charAt(contador) != '"' ) {
381
							spheroid[0] += wkt.charAt(contador);
382
							contador++;
383
						}
384
						contador +=2;
385
						while(wkt.charAt(contador) != ',') {
386
							spheroid[1] += wkt.charAt(contador);
387
							contador++;
388
						}
389
						contador++;
390
						while(wkt.charAt(contador) != ']') {
391
							spheroid[2] += wkt.charAt(contador);
392
							contador++;
393
						}
394
					}
395
				}
396
				contador++;
397
				res = "";
398
				for(; wkt.charAt(contador) != '"'; contador++) {
399
					res += wkt.charAt(contador);
400
				}
401
				if(res.equals(",PRIMEM[")) {
402
					contador++;
403
					for(; wkt.charAt(contador) != ','; contador++) {
404
						while(wkt.charAt(contador) != '"' ){
405
							primem[0] += wkt.charAt(contador);
406
							contador ++;
407
						}
408
						contador +=2;
409
						while(wkt.charAt(contador) != ']') {
410
							primem[1] += wkt.charAt(contador);
411
							contador ++;
412
						}
413
					}
414
				}
415
				contador++;
416
				res = "";
417
				for(; wkt.charAt(contador) != '"'; contador++) {
418
					res += wkt.charAt(contador);
419
				}
420
				if(res.equals("UNIT[")) {
421
					contador++;
422
					for(; wkt.charAt(contador) != ']'; contador++) {
423
						while(wkt.charAt(contador) != '"' ){
424
							unit[0] += wkt.charAt(contador);
425
							contador ++;
426
						}
427
						contador +=2;
428
						while(wkt.charAt(contador) != ']') {
429
							unit[1] += wkt.charAt(contador);
430
							contador ++;
431
						}
432
					}
433
				}
434
				contador++;
435
				res = "";
436
				for(; wkt.charAt(contador) != '"'; contador++) {
437
					res += wkt.charAt(contador);
438
				}
439
				if(res.equals(",PROJECTION[")) {
440
					contador++;
441
					for(; wkt.charAt(contador) != '"'; contador++) {
442
						projection += wkt.charAt(contador);
443
					}
444
				}
445
				contador = contador+2;
446
				res = "";
447
				for(; wkt.charAt(contador) != '"'; contador++) {
448
					res += wkt.charAt(contador);
449
				}
450
				//Hallamos el numero de parametros que tiene la cadena wkt
451
				int i = 0;
452

  
453
				int copiacontador = contador;
454
				if(res.equals(",PARAMETER[")) {
455
					do{
456
						for(; wkt.charAt(copiacontador) != ']'; copiacontador++) {
457
							while(wkt.charAt(copiacontador) != '"' )
458
								copiacontador++;
459
							copiacontador += 2;
460
							while(wkt.charAt(copiacontador) != ']' )
461
								copiacontador++;
462
							copiacontador--;
463
						}
464
						i++;
465
						copiacontador++;
466
						res = "";
467
						for(; wkt.charAt(copiacontador) != '"'; copiacontador++) {
468
							res += wkt.charAt(copiacontador);
469
						}
470
					} while (res.equals(",PARAMETER["));
471
					res = ",PARAMETER[";
472
				}
473
				// Inicializamos los parametros
474
				param_name = new String[i];
475
				param_value = new String[i];
476
				for(int j = 0 ;j < i; j++ ){
477
					param_name[j] = "";
478
					param_value[j] = "";
479
				}
480
				i = 0;
481
				if(res.equals(",PARAMETER[")) {
482
					do{
483
						contador++;
484
						for(; wkt.charAt(contador) != ']'; contador++) {
485
							while(wkt.charAt(contador) != '"' ){
486
								param_name[i] += wkt.charAt(contador);
487
								contador++;
488
							}
489
							contador += 2;
490
							while(wkt.charAt(contador) != ']' ){
491
								param_value[i] += wkt.charAt(contador);
492
								contador++;
493
							}
494
							contador--;
495
						}
496
						i++;
497
						contador++;
498
						res = "";
499
						for(; wkt.charAt(contador) != '"'; contador++) {
500
							res += wkt.charAt(contador);
501
						}
502
					} while (res.equals(",PARAMETER["));
503
				}
504

  
505
				if (res.equals(",UNIT[")){
506
					contador++;
507
					for(; wkt.charAt(contador) != ','; contador++) {
508
						while(wkt.charAt(contador) != '"' ){
509
							unit_p[0] += wkt.charAt(contador);
510
							contador ++;
511
						}
512
						contador +=2;
513
						while(wkt.charAt(contador) != ']') {
514
							unit_p[1] += wkt.charAt(contador);
515
							contador ++;
516
						}
517
					}
518
				}
519
				contador++;
520
				res = "";
521
				for(; wkt.charAt(contador) != '"'; contador++) {
522
					res += wkt.charAt(contador);
523
				}
524
				if(res.equals("AUTHORITY[")) {
525
					contador++;
526
					for(; wkt.charAt(contador) != ']'; contador++) {
527
						while(wkt.charAt(contador) != '"' ){
528
							authority[0] += wkt.charAt(contador);
529
							contador ++;
530
						}
531
						contador +=2;
532
						while(wkt.charAt(contador) != ']') {
533
							authority[1] += wkt.charAt(contador);
534
							contador ++;
535
						}
536
					}
537
				}
538
			}
539
			else if (res.equals("GEOCCS[")){
540
				/*
541
				 * parte necesaria para capturar la cadena geocentrica...
542
				 */
543

  
544
			}
545
		}else
546
			geogcs = wkt;
244
            SpatialReference sr = CrsFactory.getSpatialReferenceFromWKT(wkt);
245
            fromSpatialReference(sr);
246
//		String res = new String();
247
//		if(!wkt.startsWith("EPSG:")) {
248
//			res = "";
249
//			for(; wkt.charAt(contador) != '"'; contador++) {
250
//				res += wkt.charAt(contador);
251
//			}
252
//			if(res.equals("GEOGCS[")) {
253
//
254
//				contador++;
255
//				for(; wkt.charAt(contador) != '"'; contador++) {
256
//					geogcs += wkt.charAt(contador);
257
//				}
258
//
259
//				res = "";
260
//				contador++;
261
//				for(; wkt.charAt(contador) != '"'; contador++) {
262
//					res += wkt.charAt(contador);
263
//				}
264
//				if(res.equals(",DATUM[")) {
265
//					contador++;
266
//					for(; wkt.charAt(contador) != '"'; contador++) {
267
//						datum += wkt.charAt(contador);
268
//					}
269
//				}
270
//				res = "";
271
//				contador++;
272
//				for(; wkt.charAt(contador) != '"'; contador++) {
273
//					res += wkt.charAt(contador);
274
//				}
275
//				if(res.equals(",SPHEROID[")) {
276
//					contador++;
277
//					for(; wkt.charAt(contador) != ']'; contador++) {
278
//						while(wkt.charAt(contador) != '"' ) {
279
//							spheroid[0] += wkt.charAt(contador);
280
//							contador++;
281
//						}
282
//						contador +=2;
283
//						while(wkt.charAt(contador) != ',') {
284
//							spheroid[1] += wkt.charAt(contador);
285
//							contador++;
286
//						}
287
//						contador++;
288
//						while(wkt.charAt(contador) != ']') {
289
//							spheroid[2] += wkt.charAt(contador);
290
//							contador++;
291
//						}
292
//					}
293
//				}
294
//				contador++;
295
//				res = "";
296
//				for(; wkt.charAt(contador) != '"'; contador++) {
297
//					res += wkt.charAt(contador);
298
//				}
299
//				if(res.equals(",PRIMEM[")) {
300
//					contador++;
301
//					for(; wkt.charAt(contador) != ','; contador++) {
302
//						while(wkt.charAt(contador) != '"' ){
303
//							primem[0] += wkt.charAt(contador);
304
//							contador ++;
305
//						}
306
//						contador +=2;
307
//						while(wkt.charAt(contador) != ']') {
308
//							primem[1] += wkt.charAt(contador);
309
//							contador ++;
310
//						}
311
//					}
312
//				}
313
//				contador++;
314
//				res = "";
315
//				for(; wkt.charAt(contador) != '"'; contador++) {
316
//					res += wkt.charAt(contador);
317
//				}
318
//				if(res.equals("UNIT[")) {
319
//					contador++;
320
//					for(; wkt.charAt(contador) != ','; contador++) {
321
//						while(wkt.charAt(contador) != '"' ){
322
//							unit[0] += wkt.charAt(contador);
323
//							contador ++;
324
//						}
325
//						contador +=2;
326
//						while(wkt.charAt(contador) != ']') {
327
//							unit[1] += wkt.charAt(contador);
328
//							contador ++;
329
//						}
330
//					}
331
//				}
332
//				contador++;
333
//				res = "";
334
//				for(; wkt.charAt(contador) != '"'; contador++) {
335
//					res += wkt.charAt(contador);
336
//				}
337
//				if(res.equals("AUTHORITY[")) {
338
//					contador++;
339
//					for(; wkt.charAt(contador) != ']'; contador++) {
340
//						while(wkt.charAt(contador) != '"' ){
341
//							authority[0] += wkt.charAt(contador);
342
//							contador ++;
343
//						}
344
//						contador +=2;
345
//						while(wkt.charAt(contador) != ']') {
346
//							authority[1] += wkt.charAt(contador);
347
//							contador ++;
348
//						}
349
//					}
350
//				}
351
//			}else if (res.equals("PROJCS[")) {
352
//				contador++;
353
//				for(; wkt.charAt(contador) != '"'; contador++) {
354
//					projcs += wkt.charAt(contador);
355
//				}
356
//				contador++;
357
//				res = "";
358
//				for(; wkt.charAt(contador) != '"'; contador++) {
359
//					res += wkt.charAt(contador);
360
//				}
361
//				if(res.equals(",GEOGCS[")) {
362
//					contador++;
363
//					for(; wkt.charAt(contador) != '"'; contador++) {
364
//						geogcs += wkt.charAt(contador);
365
//					}
366
//				}
367
//
368
//				res = "";
369
//				contador++;
370
//				for(; wkt.charAt(contador) != '"'; contador++) {
371
//					res += wkt.charAt(contador);
372
//				}
373
//				if(res.equals(",DATUM[")) {
374
//					contador++;
375
//					for(; wkt.charAt(contador) != '"'; contador++) {
376
//						datum += wkt.charAt(contador);
377
//					}
378
//				}
379
//				res = "";
380
//				contador++;
381
//				for(; wkt.charAt(contador) != '"'; contador++) {
382
//					res += wkt.charAt(contador);
383
//				}
384
//				if(res.equals(",SPHEROID[")) {
385
//					contador++;
386
//					for(; wkt.charAt(contador) != ']'; contador++) {
387
//						while(wkt.charAt(contador) != '"' ) {
388
//							spheroid[0] += wkt.charAt(contador);
389
//							contador++;
390
//						}
391
//						contador +=2;
392
//						while(wkt.charAt(contador) != ',') {
393
//							spheroid[1] += wkt.charAt(contador);
394
//							contador++;
395
//						}
396
//						contador++;
397
//						while(wkt.charAt(contador) != ']') {
398
//							spheroid[2] += wkt.charAt(contador);
399
//							contador++;
400
//						}
401
//					}
402
//				}
403
//				contador++;
404
//				res = "";
405
//				for(; wkt.charAt(contador) != '"'; contador++) {
406
//					res += wkt.charAt(contador);
407
//				}
408
//				if(res.equals(",PRIMEM[")) {
409
//					contador++;
410
//					for(; wkt.charAt(contador) != ','; contador++) {
411
//						while(wkt.charAt(contador) != '"' ){
412
//							primem[0] += wkt.charAt(contador);
413
//							contador ++;
414
//						}
415
//						contador +=2;
416
//						while(wkt.charAt(contador) != ']') {
417
//							primem[1] += wkt.charAt(contador);
418
//							contador ++;
419
//						}
420
//					}
421
//				}
422
//				contador++;
423
//				res = "";
424
//				for(; wkt.charAt(contador) != '"'; contador++) {
425
//					res += wkt.charAt(contador);
426
//				}
427
//				if(res.equals("UNIT[")) {
428
//					contador++;
429
//					for(; wkt.charAt(contador) != ']'; contador++) {
430
//						while(wkt.charAt(contador) != '"' ){
431
//							unit[0] += wkt.charAt(contador);
432
//							contador ++;
433
//						}
434
//						contador +=2;
435
//						while(wkt.charAt(contador) != ']') {
436
//							unit[1] += wkt.charAt(contador);
437
//							contador ++;
438
//						}
439
//					}
440
//				}
441
//				contador++;
442
//				res = "";
443
//				for(; wkt.charAt(contador) != '"'; contador++) {
444
//					res += wkt.charAt(contador);
445
//				}
446
//				if(res.equals(",PROJECTION[")) {
447
//					contador++;
448
//					for(; wkt.charAt(contador) != '"'; contador++) {
449
//						projection += wkt.charAt(contador);
450
//					}
451
//				}
452
//				contador = contador+2;
453
//				res = "";
454
//				for(; wkt.charAt(contador) != '"'; contador++) {
455
//					res += wkt.charAt(contador);
456
//				}
457
//				//Hallamos el numero de parametros que tiene la cadena wkt
458
//				int i = 0;
459
//
460
//				int copiacontador = contador;
461
//				if(res.equals(",PARAMETER[")) {
462
//					do{
463
//						for(; wkt.charAt(copiacontador) != ']'; copiacontador++) {
464
//							while(wkt.charAt(copiacontador) != '"' )
465
//								copiacontador++;
466
//							copiacontador += 2;
467
//							while(wkt.charAt(copiacontador) != ']' )
468
//								copiacontador++;
469
//							copiacontador--;
470
//						}
471
//						i++;
472
//						copiacontador++;
473
//						res = "";
474
//						for(; wkt.charAt(copiacontador) != '"'; copiacontador++) {
475
//							res += wkt.charAt(copiacontador);
476
//						}
477
//					} while (res.equals(",PARAMETER["));
478
//					res = ",PARAMETER[";
479
//				}
480
//				// Inicializamos los parametros
481
//				param_name = new String[i];
482
//				param_value = new String[i];
483
//				for(int j = 0 ;j < i; j++ ){
484
//					param_name[j] = "";
485
//					param_value[j] = "";
486
//				}
487
//				i = 0;
488
//				if(res.equals(",PARAMETER[")) {
489
//					do{
490
//						contador++;
491
//						for(; wkt.charAt(contador) != ']'; contador++) {
492
//							while(wkt.charAt(contador) != '"' ){
493
//								param_name[i] += wkt.charAt(contador);
494
//								contador++;
495
//							}
496
//							contador += 2;
497
//							while(wkt.charAt(contador) != ']' ){
498
//								param_value[i] += wkt.charAt(contador);
499
//								contador++;
500
//							}
501
//							contador--;
502
//						}
503
//						i++;
504
//						contador++;
505
//						res = "";
506
//						for(; wkt.charAt(contador) != '"'; contador++) {
507
//							res += wkt.charAt(contador);
508
//						}
509
//					} while (res.equals(",PARAMETER["));
510
//				}
511
//
512
//				if (res.equals(",UNIT[")){
513
//					contador++;
514
//					for(; wkt.charAt(contador) != ','; contador++) {
515
//						while(wkt.charAt(contador) != '"' ){
516
//							unit_p[0] += wkt.charAt(contador);
517
//							contador ++;
518
//						}
519
//						contador +=2;
520
//						while(wkt.charAt(contador) != ']') {
521
//							unit_p[1] += wkt.charAt(contador);
522
//							contador ++;
523
//						}
524
//					}
525
//				}
526
//				contador++;
527
//				res = "";
528
//				for(; wkt.charAt(contador) != '"'; contador++) {
529
//					res += wkt.charAt(contador);
530
//				}
531
//				if(res.equals("AUTHORITY[")) {
532
//					contador++;
533
//					for(; wkt.charAt(contador) != ']'; contador++) {
534
//						while(wkt.charAt(contador) != '"' ){
535
//							authority[0] += wkt.charAt(contador);
536
//							contador ++;
537
//						}
538
//						contador +=2;
539
//						while(wkt.charAt(contador) != ']') {
540
//							authority[1] += wkt.charAt(contador);
541
//							contador ++;
542
//						}
543
//					}
544
//				}
545
//			}
546
//			else if (res.equals("GEOCCS[")){
547
//				/*
548
//				 * parte necesaria para capturar la cadena geocentrica...
549
//				 */
550
//
551
//			}
552
//		}else
553
//			geogcs = wkt;
547 554
	}
548 555

  
549 556
	public String getProjection() {
......
742 749

  
743 750
	}
744 751

  
745
	private void parseWKT(String data) {
746
		WKT wkt = new WKT(data);
747
	}
752
//	private void parseWKT(String data) {
753
//		WKT wkt = new WKT(data);
754
//	}
748 755

  
749 756
	public void setProjcs (String proj) {
750 757
		this.projcs = proj;

Also available in: Unified diff