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
|