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

View differences:

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