Index: org.gvsig.projection.jcrs/trunk/org.gvsig.projection.jcrs/org.gvsig.projection.jcrs.lib/src/main/java/org/gvsig/crs/CrsWkt.java
===================================================================
--- org.gvsig.projection.jcrs/trunk/org.gvsig.projection.jcrs/org.gvsig.projection.jcrs.lib/src/main/java/org/gvsig/crs/CrsWkt.java	(revision 820)
+++ org.gvsig.projection.jcrs/trunk/org.gvsig.projection.jcrs/org.gvsig.projection.jcrs.lib/src/main/java/org/gvsig/crs/CrsWkt.java	(revision 821)
@@ -47,6 +47,7 @@
 import javax.units.Unit;
 
 import org.apache.commons.lang3.StringUtils;
+import org.cresques.cts.ICRSFactory;
 import org.gdal.osr.SpatialReference;
 import org.geotools.referencing.CRS;
 import org.geotools.referencing.crs.AbstractSingleCRS;
@@ -55,6 +56,7 @@
 import org.geotools.referencing.datum.DefaultEllipsoid;
 import org.geotools.referencing.datum.DefaultGeodeticDatum;
 import org.geotools.referencing.datum.DefaultPrimeMeridian;
+import org.gvsig.fmap.crs.CRSFactory;
 import org.opengis.referencing.FactoryException;
 import org.opengis.referencing.NoSuchAuthorityCodeException;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -102,6 +104,10 @@
  *
  */
     public CrsWkt(SpatialReference spatialReference) {
+        fromSpatialReference(spatialReference);
+    }
+    
+    private void fromSpatialReference(SpatialReference spatialReference) {
         wkt = spatialReference.ExportToWkt();
         projcs = spatialReference.GetAttrValue("PROJCS",0);
         if(StringUtils.isEmpty(projcs)){
@@ -235,315 +241,316 @@
 	 * @param isProj
 	 */
 	private void fromWKT(String wkt, boolean isProj) {
-
-		String res = new String();
-		if(!wkt.startsWith("EPSG:")) {
-			res = "";
-			for(; wkt.charAt(contador) != '"'; contador++) {
-				res += wkt.charAt(contador);
-			}
-			if(res.equals("GEOGCS[")) {
-
-				contador++;
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					geogcs += wkt.charAt(contador);
-				}
-
-				res = "";
-				contador++;
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",DATUM[")) {
-					contador++;
-					for(; wkt.charAt(contador) != '"'; contador++) {
-						datum += wkt.charAt(contador);
-					}
-				}
-				res = "";
-				contador++;
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",SPHEROID[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ']'; contador++) {
-						while(wkt.charAt(contador) != '"' ) {
-							spheroid[0] += wkt.charAt(contador);
-							contador++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ',') {
-							spheroid[1] += wkt.charAt(contador);
-							contador++;
-						}
-						contador++;
-						while(wkt.charAt(contador) != ']') {
-							spheroid[2] += wkt.charAt(contador);
-							contador++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",PRIMEM[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ','; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							primem[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							primem[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals("UNIT[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ','; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							unit[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							unit[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals("AUTHORITY[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ']'; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							authority[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							authority[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-			}else if (res.equals("PROJCS[")) {
-				contador++;
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					projcs += wkt.charAt(contador);
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",GEOGCS[")) {
-					contador++;
-					for(; wkt.charAt(contador) != '"'; contador++) {
-						geogcs += wkt.charAt(contador);
-					}
-				}
-
-				res = "";
-				contador++;
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",DATUM[")) {
-					contador++;
-					for(; wkt.charAt(contador) != '"'; contador++) {
-						datum += wkt.charAt(contador);
-					}
-				}
-				res = "";
-				contador++;
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",SPHEROID[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ']'; contador++) {
-						while(wkt.charAt(contador) != '"' ) {
-							spheroid[0] += wkt.charAt(contador);
-							contador++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ',') {
-							spheroid[1] += wkt.charAt(contador);
-							contador++;
-						}
-						contador++;
-						while(wkt.charAt(contador) != ']') {
-							spheroid[2] += wkt.charAt(contador);
-							contador++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",PRIMEM[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ','; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							primem[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							primem[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals("UNIT[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ']'; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							unit[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							unit[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals(",PROJECTION[")) {
-					contador++;
-					for(; wkt.charAt(contador) != '"'; contador++) {
-						projection += wkt.charAt(contador);
-					}
-				}
-				contador = contador+2;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				//Hallamos el numero de parametros que tiene la cadena wkt
-				int i = 0;
-
-				int copiacontador = contador;
-				if(res.equals(",PARAMETER[")) {
-					do{
-						for(; wkt.charAt(copiacontador) != ']'; copiacontador++) {
-							while(wkt.charAt(copiacontador) != '"' )
-								copiacontador++;
-							copiacontador += 2;
-							while(wkt.charAt(copiacontador) != ']' )
-								copiacontador++;
-							copiacontador--;
-						}
-						i++;
-						copiacontador++;
-						res = "";
-						for(; wkt.charAt(copiacontador) != '"'; copiacontador++) {
-							res += wkt.charAt(copiacontador);
-						}
-					} while (res.equals(",PARAMETER["));
-					res = ",PARAMETER[";
-				}
-				// Inicializamos los parametros
-				param_name = new String[i];
-				param_value = new String[i];
-				for(int j = 0 ;j < i; j++ ){
-					param_name[j] = "";
-					param_value[j] = "";
-				}
-				i = 0;
-				if(res.equals(",PARAMETER[")) {
-					do{
-						contador++;
-						for(; wkt.charAt(contador) != ']'; contador++) {
-							while(wkt.charAt(contador) != '"' ){
-								param_name[i] += wkt.charAt(contador);
-								contador++;
-							}
-							contador += 2;
-							while(wkt.charAt(contador) != ']' ){
-								param_value[i] += wkt.charAt(contador);
-								contador++;
-							}
-							contador--;
-						}
-						i++;
-						contador++;
-						res = "";
-						for(; wkt.charAt(contador) != '"'; contador++) {
-							res += wkt.charAt(contador);
-						}
-					} while (res.equals(",PARAMETER["));
-				}
-
-				if (res.equals(",UNIT[")){
-					contador++;
-					for(; wkt.charAt(contador) != ','; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							unit_p[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							unit_p[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-				contador++;
-				res = "";
-				for(; wkt.charAt(contador) != '"'; contador++) {
-					res += wkt.charAt(contador);
-				}
-				if(res.equals("AUTHORITY[")) {
-					contador++;
-					for(; wkt.charAt(contador) != ']'; contador++) {
-						while(wkt.charAt(contador) != '"' ){
-							authority[0] += wkt.charAt(contador);
-							contador ++;
-						}
-						contador +=2;
-						while(wkt.charAt(contador) != ']') {
-							authority[1] += wkt.charAt(contador);
-							contador ++;
-						}
-					}
-				}
-			}
-			else if (res.equals("GEOCCS[")){
-				/*
-				 * parte necesaria para capturar la cadena geocentrica...
-				 */
-
-			}
-		}else
-			geogcs = wkt;
+            SpatialReference sr = CrsFactory.getSpatialReferenceFromWKT(wkt);
+            fromSpatialReference(sr);
+//		String res = new String();
+//		if(!wkt.startsWith("EPSG:")) {
+//			res = "";
+//			for(; wkt.charAt(contador) != '"'; contador++) {
+//				res += wkt.charAt(contador);
+//			}
+//			if(res.equals("GEOGCS[")) {
+//
+//				contador++;
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					geogcs += wkt.charAt(contador);
+//				}
+//
+//				res = "";
+//				contador++;
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",DATUM[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != '"'; contador++) {
+//						datum += wkt.charAt(contador);
+//					}
+//				}
+//				res = "";
+//				contador++;
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",SPHEROID[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ']'; contador++) {
+//						while(wkt.charAt(contador) != '"' ) {
+//							spheroid[0] += wkt.charAt(contador);
+//							contador++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ',') {
+//							spheroid[1] += wkt.charAt(contador);
+//							contador++;
+//						}
+//						contador++;
+//						while(wkt.charAt(contador) != ']') {
+//							spheroid[2] += wkt.charAt(contador);
+//							contador++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",PRIMEM[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ','; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							primem[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							primem[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals("UNIT[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ','; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							unit[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							unit[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals("AUTHORITY[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ']'; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							authority[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							authority[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//			}else if (res.equals("PROJCS[")) {
+//				contador++;
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					projcs += wkt.charAt(contador);
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",GEOGCS[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != '"'; contador++) {
+//						geogcs += wkt.charAt(contador);
+//					}
+//				}
+//
+//				res = "";
+//				contador++;
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",DATUM[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != '"'; contador++) {
+//						datum += wkt.charAt(contador);
+//					}
+//				}
+//				res = "";
+//				contador++;
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",SPHEROID[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ']'; contador++) {
+//						while(wkt.charAt(contador) != '"' ) {
+//							spheroid[0] += wkt.charAt(contador);
+//							contador++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ',') {
+//							spheroid[1] += wkt.charAt(contador);
+//							contador++;
+//						}
+//						contador++;
+//						while(wkt.charAt(contador) != ']') {
+//							spheroid[2] += wkt.charAt(contador);
+//							contador++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",PRIMEM[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ','; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							primem[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							primem[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals("UNIT[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ']'; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							unit[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							unit[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals(",PROJECTION[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != '"'; contador++) {
+//						projection += wkt.charAt(contador);
+//					}
+//				}
+//				contador = contador+2;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				//Hallamos el numero de parametros que tiene la cadena wkt
+//				int i = 0;
+//
+//				int copiacontador = contador;
+//				if(res.equals(",PARAMETER[")) {
+//					do{
+//						for(; wkt.charAt(copiacontador) != ']'; copiacontador++) {
+//							while(wkt.charAt(copiacontador) != '"' )
+//								copiacontador++;
+//							copiacontador += 2;
+//							while(wkt.charAt(copiacontador) != ']' )
+//								copiacontador++;
+//							copiacontador--;
+//						}
+//						i++;
+//						copiacontador++;
+//						res = "";
+//						for(; wkt.charAt(copiacontador) != '"'; copiacontador++) {
+//							res += wkt.charAt(copiacontador);
+//						}
+//					} while (res.equals(",PARAMETER["));
+//					res = ",PARAMETER[";
+//				}
+//				// Inicializamos los parametros
+//				param_name = new String[i];
+//				param_value = new String[i];
+//				for(int j = 0 ;j < i; j++ ){
+//					param_name[j] = "";
+//					param_value[j] = "";
+//				}
+//				i = 0;
+//				if(res.equals(",PARAMETER[")) {
+//					do{
+//						contador++;
+//						for(; wkt.charAt(contador) != ']'; contador++) {
+//							while(wkt.charAt(contador) != '"' ){
+//								param_name[i] += wkt.charAt(contador);
+//								contador++;
+//							}
+//							contador += 2;
+//							while(wkt.charAt(contador) != ']' ){
+//								param_value[i] += wkt.charAt(contador);
+//								contador++;
+//							}
+//							contador--;
+//						}
+//						i++;
+//						contador++;
+//						res = "";
+//						for(; wkt.charAt(contador) != '"'; contador++) {
+//							res += wkt.charAt(contador);
+//						}
+//					} while (res.equals(",PARAMETER["));
+//				}
+//
+//				if (res.equals(",UNIT[")){
+//					contador++;
+//					for(; wkt.charAt(contador) != ','; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							unit_p[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							unit_p[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//				contador++;
+//				res = "";
+//				for(; wkt.charAt(contador) != '"'; contador++) {
+//					res += wkt.charAt(contador);
+//				}
+//				if(res.equals("AUTHORITY[")) {
+//					contador++;
+//					for(; wkt.charAt(contador) != ']'; contador++) {
+//						while(wkt.charAt(contador) != '"' ){
+//							authority[0] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//						contador +=2;
+//						while(wkt.charAt(contador) != ']') {
+//							authority[1] += wkt.charAt(contador);
+//							contador ++;
+//						}
+//					}
+//				}
+//			}
+//			else if (res.equals("GEOCCS[")){
+//				/*
+//				 * parte necesaria para capturar la cadena geocentrica...
+//				 */
+//
+//			}
+//		}else
+//			geogcs = wkt;
 	}
 
 	public String getProjection() {
@@ -742,9 +749,9 @@
 
 	}
 
-	private void parseWKT(String data) {
-		WKT wkt = new WKT(data);
-	}
+//	private void parseWKT(String data) {
+//		WKT wkt = new WKT(data);
+//	}
 
 	public void setProjcs (String proj) {
 		this.projcs = proj;
