Revision 5089

View differences:

trunk/extensions/extGeoreferencing/src/com/iver/cit/gvsig/utils/PointManager.java
134 134
		if(map != null){
135 135
			dialog.setMapCoordText(map.getX(), map.getY());
136 136
			dialog.getSelectPointsPanel().lastLong = String.valueOf(map.getX());
137
			dialog.getSelectPointsPanel().lastLat = String.valueOf(map.getX());
137
			dialog.getSelectPointsPanel().lastLat = String.valueOf(map.getY());
138 138
		}
139 139
		
140 140
		//El Checkbox de activaci?n
trunk/extensions/extGeoreferencing/src/com/iver/cit/gvsig/utils/GeoPointPersistence.java
26 26
import org.xml.sax.SAXException;
27 27

  
28 28
import com.iver.andami.PluginServices;
29
import com.iver.cit.gvsig.fmap.DriverException;
29 30
import com.iver.cit.gvsig.fmap.ViewPort;
31
import com.iver.cit.gvsig.fmap.layers.FLyrGeoRaster;
30 32
import com.iver.cit.gvsig.fmap.layers.FLyrPoints;
31 33
import com.iver.cit.gvsig.fmap.layers.GeoPoint;
32 34
import com.iver.cit.gvsig.gui.View;
......
42 44
	private Document 		xmlDoc = null;
43 45
	private Element 		generalTag = null;
44 46
	private FLyrPoints 		lyrPoints = null;
47
	private double[]		lastViewPort = null;
45 48
	//**********************End Vars******************************
46 49
	
47 50
	//**********************Methods*******************************
......
76 79
	        	lyrPoints.clear();
77 80
	        	for(int i=0;i<nodeList.getLength();i++){
78 81
	        		Node node = nodeList.item(i);
82
	        		if(node.getNodeName().equals("FLyrGeoRaster")){
83
	        			NodeList nl = node.getChildNodes();
84
	        			lastViewPort = processFlyrGeoRasterNodeValue(nl);	
85
	        		}
79 86
	        		if(node.getNodeName().equals("GeoPoint")){
80 87
	        			NodeList nl = node.getChildNodes();
81
	        			this.processGeoPointNodeValue(nl);	
88
	        			processGeoPointNodeValue(nl);	
82 89
	        		}
83 90
	        	}
84 91
	        	this.geoPointList = lyrPoints.getListPoint();
......
90 97
	    } catch (IOException e1) {
91 98
	            return;
92 99
	    }
93
		    
94 100
	}
95 101
		
96 102
	/**
......
109 115
		    
110 116
		generalTag = xmlDoc.createElement("GeoPoints");
111 117
		xmlDoc.appendChild(generalTag);
112
			   
118
		
119
		createXMLFLyrGeoRasterNode(lyrPoints.getLyrGeoRaster());
120
		
113 121
		for(int i=0;i<geoPointList.size();i++)
114 122
			createXMLGeoPointNode((GeoPoint)(geoPointList.get(i)), i);
115 123
		  
......
130 138
	//****************************************************
131 139
	
132 140
	/**
141
	 * Aplica una transformaci?n al extent dependiendo de si el extent de la imagen 
142
	 * original ha cambiado o no. Si la capa FLyrGeoRaster cargada tiene un extent
143
	 * distinto al que se ha salvado en el fichero de puntos esto significa que el 
144
	 * extent de la miniimagen que tiene los puntos relativos a las coordenadas de la
145
	 * imagen en pixels ha de sufrir un desplazamiento.
146
	 * @param imgExtent Extent de la imagen 
147
	 * @param miniExtent ViewPor del miniextent a transformar
148
	 * @return ViewPort	ViewPort del miniextent transformado 
149
	 */
150
	private ViewPort transformMiniExtent(Rectangle2D imgExtent, ViewPort miniExtent){
151
		if(	lastViewPort[0] != imgExtent.getMinX() ||
152
			lastViewPort[1] != imgExtent.getMinY() ||
153
			lastViewPort[2] != imgExtent.getWidth() ||
154
			lastViewPort[3] != imgExtent.getHeight()){
155
			Rectangle2D r = new Rectangle2D.Double();
156
			r.setRect( 	miniExtent.getExtent().getMinX() - (lastViewPort[0] - imgExtent.getMinX()), 
157
						miniExtent.getExtent().getMinY() - (lastViewPort[1] - imgExtent.getMinY()),
158
						miniExtent.getExtent().getWidth(),
159
						miniExtent.getExtent().getHeight());
160
			miniExtent.setExtent(r);
161
		}
162
		return miniExtent;
163
	}
164
	
165
	/**
166
	 * Aplica una transformaci?n al centro del extent dependiendo de si el extent de la imagen 
167
	 * original ha cambiado o no. 
168
	 */
169
	private Point2D transformCenter(Rectangle2D imgExtent, Point2D center){
170
		if(	lastViewPort[0] != imgExtent.getMinX() ||
171
			lastViewPort[1] != imgExtent.getMinY() ||
172
			lastViewPort[2] != imgExtent.getWidth() ||
173
			lastViewPort[3] != imgExtent.getHeight()){
174
			Point2D c = new Point2D.Double();
175
			c.setLocation(center.getX() - (lastViewPort[0] - imgExtent.getMinX()), 
176
						  center.getY() - (lastViewPort[1] - imgExtent.getMinY()));
177
			return c;
178
		}
179
		return center;
180
	}
181
	
182
	/**
183
	 * Obtiene el valor del extent de la imagen obtenido desde un nodo
184
	 * XML. A partir de este valor obtenido crea un punto en la capa.
185
	 */
186
	private double[] processFlyrGeoRasterNodeValue(NodeList nl){
187
		double[] res = null;
188
		for(int j=0;j<nl.getLength();j++){
189
			Node geoNode = nl.item(j);
190
			if(geoNode.getNodeName().equals("ViewPort")){
191
				res = new double[4];
192
				NodeList vpChildNodes = geoNode.getChildNodes();
193
				for(int i=0;i<vpChildNodes.getLength();i++){
194
					Node vpNode = vpChildNodes.item(i);
195
					if(vpNode.getNodeName().equals("Extent")){
196
						NodeList extentChildNodes = vpNode.getChildNodes();
197
						for(int k=0;k<extentChildNodes.getLength();k++){
198
							Node extentNode = extentChildNodes.item(k);
199
							if(extentNode.getNodeName().equals("X"))
200
								res[0] = Double.valueOf(extentNode.getFirstChild().getNodeValue()).doubleValue();
201
							if(extentNode.getNodeName().equals("Y"))
202
								res[1] = Double.valueOf(extentNode.getFirstChild().getNodeValue()).doubleValue();
203
							if(extentNode.getNodeName().equals("Width"))
204
								res[2] = Double.valueOf(extentNode.getFirstChild().getNodeValue()).doubleValue();
205
							if(extentNode.getNodeName().equals("Height"))
206
								res[3] = Double.valueOf(extentNode.getFirstChild().getNodeValue()).doubleValue();
207
						}
208
					}
209
				}
210
			}
211
		}
212
		return res;
213
	}
214
	
215
	/**
133 216
	 * Obtiene el valor de un punto georeferenciado obtenido desde un nodo
134 217
	 * XML. A partir de este valor obtenido crea un punto en la capa.
135 218
	 */
......
173 256
			return;
174 257
		}
175 258
		int pos = lyrPoints.getCountPoints() -1;
259
		try{
260
			leftViewPort = transformMiniExtent(lyrPoints.getLyrGeoRaster().getFullExtent(), leftViewPort);
261
			leftCenter = transformCenter(lyrPoints.getLyrGeoRaster().getFullExtent(), leftCenter);
262
		}catch(DriverException ex){}
176 263
		lyrPoints.setPointActive(pos, active);
177 264
		lyrPoints.setLeftCenterPoint(pos,leftCenter);
178 265
		lyrPoints.setRightCenterPoint(pos, rightCenter);
......
314 401
	}
315 402
	
316 403
	/**
404
	 * Convierte la capa a georreferenciar a un elemento XML que ser? a?adidoo al
405
	 * documento. 
406
	 * @param lyrGeo Capa a georreferenciar 
407
	 */
408
	private void createXMLFLyrGeoRasterNode(FLyrGeoRaster lyrGeo) {
409
		Element xmlGeoPoint;
410
		xmlGeoPoint = xmlDoc.createElement("FLyrGeoRaster");
411
		generalTag.appendChild(xmlGeoPoint);
412
		xmlGeoPoint.setAttribute("Name", lyrGeo.getName());
413
		String[] vpData = {String.valueOf(lyrGeo.getMinX()),
414
							String.valueOf(lyrGeo.getMinY()),
415
							String.valueOf(lyrGeo.getWidth()),
416
							String.valueOf(lyrGeo.getHeight()),
417
							String.valueOf(lyrGeo.getImageWidth()),
418
							String.valueOf(lyrGeo.getImageHeight()),
419
							lyrGeo.getProjection().getAbrev()};
420
		createViewPortNode(xmlGeoPoint, "ViewPort", vpData);
421
	}
422
		
423
	/**
317 424
	 * Convierte un geopunto a un elemento XML que ser? a?adido al 
318 425
	 * documento. 
319 426
	 * @param geoPoint GeoPoint

Also available in: Unified diff