Revision 4234
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/StatusLayerRaster.java | ||
---|---|---|
45 | 45 |
import org.cresques.io.GeoRasterFile; |
46 | 46 |
import org.cresques.io.raster.RasterFilterStackManager; |
47 | 47 |
|
48 |
import com.iver.cit.gvsig.fmap.MapControl; |
|
48 | 49 |
import com.iver.utiles.XMLEntity; |
49 | 50 |
|
50 | 51 |
/** |
... | ... | |
58 | 59 |
*/ |
59 | 60 |
public class StatusLayerRaster implements StatusRasterInterface{ |
60 | 61 |
|
61 |
public String clase = "com.iver.cit.gvsig.fmap.layers.StatusLayerRaster";
|
|
62 |
public static String defaultClass = "com.iver.cit.gvsig.fmap.layers.StatusLayerRaster";
|
|
62 | 63 |
|
63 | 64 |
//Valor de opacidad global de la imagen |
64 | 65 |
public int transparency = 0; |
... | ... | |
74 | 75 |
//Filtros para poder montar una nueva pila |
75 | 76 |
public ArrayList filters = new ArrayList(); |
76 | 77 |
|
78 |
private boolean isPansharpInStack = false; |
|
79 |
|
|
77 | 80 |
/* (non-Javadoc) |
78 | 81 |
* @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#setXMLEntity(com.iver.utiles.XMLEntity) |
79 | 82 |
*/ |
80 | 83 |
public void setXMLEntity(XMLEntity xml, RasterOperations layer)throws XMLException { |
84 |
|
|
85 |
//Recuperamos las propiedades de los filtros |
|
86 |
for(int i=0;i<xml.getPropertyCount();i++){ |
|
87 |
if(xml.getPropertyName(i).startsWith("filter.")){ |
|
88 |
if(xml.getPropertyName(i).startsWith("filter.pansharpening")) |
|
89 |
isPansharpInStack = true; |
|
90 |
filters.add(xml.getPropertyName(i)+"="+xml.getPropertyValue(i)); |
|
91 |
} |
|
92 |
} |
|
93 |
|
|
81 | 94 |
if (xml.contains("raster.opacityLevel")) { |
82 | 95 |
transparency = xml.getIntProperty("raster.opacityLevel"); |
83 | 96 |
} |
... | ... | |
99 | 112 |
}else |
100 | 113 |
break; |
101 | 114 |
} |
102 |
|
|
103 |
//Recuperamos las propiedades de los filtros |
|
104 |
for(int i=0;i<xml.getPropertyCount();i++){ |
|
105 |
if(xml.getPropertyName(i).startsWith("filter.")){ |
|
106 |
filters.add(xml.getPropertyName(i)+"="+xml.getPropertyValue(i)); |
|
107 |
} |
|
108 |
} |
|
109 |
|
|
110 | 115 |
} |
111 | 116 |
|
112 | 117 |
|
... | ... | |
116 | 121 |
public void getXMLEntity(XMLEntity xml, boolean loadClass, RasterOperations layer) throws XMLException { |
117 | 122 |
|
118 | 123 |
if(loadClass) |
119 |
xml.putProperty("raster.class", clase);
|
|
124 |
xml.putProperty("raster.class", StatusLayerRaster.defaultClass);
|
|
120 | 125 |
|
121 | 126 |
if(transparency!=255) |
122 | 127 |
xml.putProperty("raster.opacityLevel", ""+transparency); |
... | ... | |
148 | 153 |
l = filters; |
149 | 154 |
|
150 | 155 |
|
151 |
for(int i=0;i<l.size();i++){
|
|
156 |
for(int i=0;i<l.size();i++) |
|
152 | 157 |
xml.putProperty(getElem((String)l.get(i)), getValue((String)l.get(i))); |
153 |
//System.out.println("==>"+getElem((String)l.get(i))+" "+getValue((String)l.get(i))); |
|
154 |
} |
|
155 | 158 |
} |
156 | 159 |
|
157 | 160 |
/** |
... | ... | |
189 | 192 |
* @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#applyStatus(com.iver.cit.gvsig.fmap.layers.RasterFileAdapter) |
190 | 193 |
*/ |
191 | 194 |
public void applyStatus(RasterOperations layer){ |
192 |
|
|
193 |
//Crea la pila de filtros a partir de las propiedades recuperadas desde el XML |
|
194 |
|
|
195 |
if(layer.getFilterStack() != null){ |
|
196 |
RasterFilterStackManager stackManager |
|
197 |
= new RasterFilterStackManager(layer.getFilterStack()); |
|
198 |
|
|
199 |
stackManager.createStackFromStrings(this.filters); |
|
200 |
} |
|
201 |
|
|
195 |
|
|
202 | 196 |
//Eliminamos el fichero inicial y cargamos las bandas si hay para que se carguen |
203 | 197 |
//en el orden correcto |
204 | 198 |
if(layer instanceof FLyrRaster){ |
... | ... | |
221 | 215 |
|
222 | 216 |
if(transparency!=255) |
223 | 217 |
layer.setTransparency(transparency); |
218 |
|
|
219 |
//Crea la pila de filtros a partir de las propiedades recuperadas desde el XML |
|
220 |
if(layer.getFilterStack() != null){ |
|
221 |
RasterFilterStackManager stackManager = new RasterFilterStackManager(layer.getFilterStack()); |
|
222 |
if(this.isPansharpInStack) |
|
223 |
stackManager.createStackFromStrings(this.filters, ((FLyrRaster)layer).getSource().getFiles()); |
|
224 |
else |
|
225 |
stackManager.createStackFromStrings(this.filters); |
|
226 |
} |
|
224 | 227 |
|
225 |
|
|
226 | 228 |
} |
227 | 229 |
} |
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/Tiling.java | ||
---|---|---|
31 | 31 |
int numRows, numCols; |
32 | 32 |
double [][] srcPts; |
33 | 33 |
Rectangle [] tile; |
34 |
double width = 500, height = 500; |
|
34 | 35 |
|
35 | 36 |
AffineTransform mat; |
36 | 37 |
ViewPort vp; |
... | ... | |
40 | 41 |
tileMaxHeight = tileH; |
41 | 42 |
|
42 | 43 |
int stepX, stepY; |
43 |
int xProv, yProv, wProv, hProv; |
|
44 |
double xProvD, yProvD, wProvD, hProvD; |
|
44 |
int xProv, yProv; |
|
45 | 45 |
int altoAux, anchoAux; |
46 | 46 |
|
47 | 47 |
// Vamos a hacerlo en trozos de AxH |
... | ... | |
128 | 128 |
return tileMaxWidth; |
129 | 129 |
} |
130 | 130 |
|
131 |
ViewPort[] viewPortList = null; |
|
132 |
private void calcViewPort(ViewPort viewPort)throws NoninvertibleTransformException{ |
|
133 |
viewPortList = new ViewPort[numCols*numRows]; |
|
134 |
|
|
135 |
if(viewPort.getImageWidth() < width && viewPort.getImageHeight() < height){ |
|
136 |
viewPortList[0] = viewPort; |
|
137 |
return; |
|
138 |
} |
|
139 |
|
|
140 |
int vpCnt = 0; |
|
141 |
|
|
142 |
double imgPxX = viewPort.getImageWidth(); |
|
143 |
double dWcX = viewPort.getAdjustedExtent().getWidth(); |
|
144 |
double tileWcW = (getTile(vpCnt).getSize().getWidth() * dWcX) / imgPxX; |
|
145 |
|
|
146 |
double imgPxY = viewPort.getImageHeight(); |
|
147 |
double dWcY = viewPort.getAdjustedExtent().getHeight(); |
|
148 |
double tileWcH = (getTile(vpCnt).getSize().getHeight() * dWcY) / imgPxY; |
|
149 |
|
|
150 |
viewPortList[0] = viewPort.cloneViewPort(); |
|
151 |
viewPortList[0].setImageSize(getTile(vpCnt).getSize()); |
|
152 |
viewPortList[0].setExtent(new Rectangle2D.Double(viewPort.getAdjustedExtent().getMinX(), viewPort.getAdjustedExtent().getMaxY() - tileWcH, tileWcW, tileWcH)); |
|
153 |
viewPortList[0].setAffineTransform(mat); |
|
154 |
|
|
155 |
double wt = tileWcW; |
|
156 |
double ht = tileWcH; |
|
157 |
double xt = viewPort.getAdjustedExtent().getMinX(); |
|
158 |
double yt = viewPort.getAdjustedExtent().getMaxY() - tileWcH; |
|
159 |
|
|
160 |
for (int stepY=0; stepY < numRows; stepY++) { |
|
161 |
wt = tileWcW; |
|
162 |
xt = viewPort.getAdjustedExtent().getMinX(); |
|
163 |
for (int stepX=0; stepX < numCols; stepX++) { |
|
164 |
vpCnt = stepY*numCols+stepX; |
|
165 |
if(vpCnt > 0){ |
|
166 |
if(stepX > 0) |
|
167 |
xt += wt; |
|
168 |
if((xt + wt) > viewPort.getAdjustedExtent().getMaxX()) |
|
169 |
wt = Math.abs(viewPort.getAdjustedExtent().getMaxX() - xt); |
|
170 |
|
|
171 |
viewPortList[vpCnt] = viewPort.cloneViewPort(); |
|
172 |
viewPortList[vpCnt].setImageSize(getTile(vpCnt).getSize()); |
|
173 |
viewPortList[vpCnt].setExtent(new Rectangle2D.Double(xt, yt, wt, ht)); |
|
174 |
viewPortList[vpCnt].setAffineTransform(mat); |
|
175 |
|
|
176 |
} |
|
177 |
//System.out.println("ViewPort: "+vpCnt+" "+viewPortList[vpCnt].getAdjustedExtent()+" "+getTile(vpCnt).getSize()); |
|
178 |
} |
|
179 |
if((yt - ht) < viewPort.getAdjustedExtent().getMinY()){ |
|
180 |
ht = Math.abs(yt - viewPort.getAdjustedExtent().getMinY()); |
|
181 |
yt = viewPort.getAdjustedExtent().getMinY(); |
|
182 |
}else |
|
183 |
yt -= ht; |
|
184 |
} |
|
185 |
} |
|
186 |
|
|
131 | 187 |
public ViewPort getTileViewPort(ViewPort viewPort, int tileNr) throws NoninvertibleTransformException { |
188 |
/*if(viewPortList == null) |
|
189 |
this.calcViewPort(viewPort); |
|
190 |
return viewPortList[tileNr];*/ |
|
132 | 191 |
double [] dstPts = new double[8]; |
133 | 192 |
double [] srcPts = getTilePts(tileNr); |
134 | 193 |
Rectangle tile = getTile(tileNr); |
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLyrRaster.java | ||
---|---|---|
365 | 365 |
} |
366 | 366 |
|
367 | 367 |
xml.putProperty("driverName", getSource().getDriver().getName()); |
368 |
//xml.putProperty("raster.opacityLevel", ""+getTransparency()); |
|
369 |
if(status!=null) |
|
370 |
status.getXMLEntity(xml, true, this); |
|
368 |
|
|
369 |
//Si no hay ning?n Status aplicamos el StatusLayerRaster que se usa por defecto |
|
370 |
if(status == null) |
|
371 |
status = new StatusLayerRaster(); |
|
372 |
|
|
373 |
status.getXMLEntity(xml, true, this); |
|
374 |
|
|
371 | 375 |
|
372 | 376 |
return xml; |
373 | 377 |
} |
... | ... | |
401 | 405 |
setSource(adapter); |
402 | 406 |
// Para notificar al adapter-driver cual es la proyecci?n. |
403 | 407 |
setProjection(super.getProjection()); |
404 |
String claseStr = null; |
|
408 |
|
|
409 |
//Inicializamos la clase a la que se usa por defecto para |
|
410 |
//compatibilidad con proyectos antiguos |
|
411 |
String claseStr = StatusLayerRaster.defaultClass; |
|
405 | 412 |
if (xml.contains("raster.class")) { |
406 | 413 |
claseStr = xml.getStringProperty("raster.class"); |
407 | 414 |
} |
Also available in: Unified diff