Revision 528
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/DefaultMapControl3D.java | ||
---|---|---|
31 | 31 |
import gov.nasa.worldwind.avlist.AVKey; |
32 | 32 |
import gov.nasa.worldwind.avlist.AVListImpl; |
33 | 33 |
import gov.nasa.worldwind.awt.WorldWindowGLJPanel; |
34 |
import gov.nasa.worldwind.geom.Sector; |
|
34 | 35 |
import gov.nasa.worldwind.globes.Earth; |
35 | 36 |
import gov.nasa.worldwind.globes.EarthFlat; |
36 | 37 |
import gov.nasa.worldwind.globes.ElevationModel; |
... | ... | |
59 | 60 |
import javax.swing.JPanel; |
60 | 61 |
|
61 | 62 |
import org.gvsig.fmap.dal.exception.DataException; |
63 |
import org.gvsig.fmap.dal.exception.ReadException; |
|
64 |
import org.gvsig.fmap.geom.Geometry.SUBTYPES; |
|
65 |
import org.gvsig.fmap.geom.GeometryLocator; |
|
66 |
import org.gvsig.fmap.geom.GeometryManager; |
|
67 |
import org.gvsig.fmap.geom.exception.CreateEnvelopeException; |
|
68 |
import org.gvsig.fmap.geom.primitive.Envelope; |
|
62 | 69 |
import org.gvsig.fmap.mapcontext.MapContext; |
63 | 70 |
import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport; |
64 | 71 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
... | ... | |
241 | 248 |
} |
242 | 249 |
|
243 | 250 |
protected void addGvSIGLayer(FLayer layer, int index) throws DataException { |
251 |
|
|
252 |
if(!isValidLayer(layer)){ |
|
253 |
LOG.warn( |
|
254 |
"Invalid layer {}. Make sure layer has valid projection. 3D plugins only accepts EPSG:4326", |
|
255 |
layer); |
|
256 |
return; |
|
257 |
} |
|
258 |
|
|
244 | 259 |
LayerConverter converter = new DefaultLayerConverter(); |
245 | 260 |
|
246 | 261 |
View3DManager manager = View3DLocator.getManager(); |
... | ... | |
265 | 280 |
(CompoundElevationModel) getWwd().getModel().getGlobe() |
266 | 281 |
.getElevationModel(); |
267 | 282 |
cem.addElevationModel(elevationModel); |
268 |
LOG.debug("Layer {} added like elevation model", layer.getName()); |
|
269 | 283 |
} |
270 | 284 |
} |
271 | 285 |
|
286 |
private boolean isValidLayer(FLayer layer) { |
|
287 |
|
|
288 |
// Checks if layer envelope is valid or not. |
|
289 |
GeometryManager geoManager = GeometryLocator.getGeometryManager(); |
|
290 |
double[] degreesArray = Sector.FULL_SPHERE.asDegreesArray(); |
|
291 |
Envelope fullSphereEnvelope = null; |
|
292 |
|
|
293 |
try { |
|
294 |
fullSphereEnvelope = |
|
295 |
geoManager.createEnvelope(degreesArray[2], degreesArray[0], |
|
296 |
degreesArray[3], degreesArray[1], SUBTYPES.GEOM2D); |
|
297 |
|
|
298 |
return fullSphereEnvelope.contains(layer.getFullEnvelope()); |
|
299 |
} catch (CreateEnvelopeException e) { |
|
300 |
LOG.error( |
|
301 |
"Can't create envelope with this parameters {} {} {} {} {}", |
|
302 |
new Object[] { degreesArray[2], degreesArray[3], |
|
303 |
degreesArray[0], degreesArray[1], SUBTYPES.GEOM2D }); |
|
304 |
return false; |
|
305 |
} catch (ReadException e) { |
|
306 |
LOG.error("Can't get envelope of {}. Can't determinate if layer is valid or not."); |
|
307 |
return false; |
|
308 |
} |
|
309 |
} |
|
310 |
|
|
272 | 311 |
private void addGvSIGLayers(FLayers layers) throws BaseException { |
273 | 312 |
if (layers == null) { |
274 | 313 |
return; |
275 | 314 |
} |
276 |
|
|
315 |
|
|
277 | 316 |
layers.accept(new LayersVisitor() { |
278 | 317 |
|
279 | 318 |
public void visit(Object obj) throws VisitCanceledException, |
... | ... | |
283 | 322 |
} |
284 | 323 |
|
285 | 324 |
public void visit(FLayer layer) throws BaseException { |
286 |
|
|
325 |
|
|
287 | 326 |
if (layer.isAvailable()) { |
288 | 327 |
addGvSIGLayer(layer); |
289 | 328 |
} |
... | ... | |
431 | 470 |
|
432 | 471 |
observableHelper.notifyObservers(DefaultMapControl3D.this, |
433 | 472 |
beforeDisposeNotification); |
434 |
|
|
473 |
|
|
435 | 474 |
while (WorldWind.getRetrievalService().hasActiveTasks()) { |
436 | 475 |
try { |
437 | 476 |
Thread.sleep(100); |
Also available in: Unified diff