Revision 461 2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/data/RasterTiledImageLayer.java

View differences:

RasterTiledImageLayer.java
27 27
import gov.nasa.worldwind.avlist.AVKey;
28 28
import gov.nasa.worldwind.avlist.AVList;
29 29
import gov.nasa.worldwind.data.RasterServer;
30
import gov.nasa.worldwind.geom.Angle;
31
import gov.nasa.worldwind.geom.Extent;
32
import gov.nasa.worldwind.geom.Sector;
30 33
import gov.nasa.worldwind.layers.BasicTiledImageLayer;
34
import gov.nasa.worldwind.layers.TextureTile;
35
import gov.nasa.worldwind.render.DrawContext;
31 36
import gov.nasa.worldwind.retrieve.RetrievalPostProcessor;
32 37
import gov.nasa.worldwind.retrieve.Retriever;
33 38
import gov.nasa.worldwind.retrieve.RetrieverFactory;
39
import gov.nasa.worldwind.util.Logging;
34 40
import gov.nasa.worldwind.util.WWUtil;
35 41

  
36 42
import org.slf4j.Logger;
37 43
import org.slf4j.LoggerFactory;
38 44
import org.w3c.dom.Element;
39

  
40 45
import org.gvsig.fmap.mapcontext.MapContext;
41 46
import org.gvsig.fmap.mapcontext.layers.FLayer;
42 47
import org.gvsig.view3d.swing.impl.DefaultMapControl3D;
......
153 158
        this.setValue(AVKey.RETRIEVER_FACTORY_LOCAL, retrieverFactory);
154 159

  
155 160
    }
161
    
162
    protected boolean isTileVisible(DrawContext dc, TextureTile tile) {
163
        
164
        if(tile.getSector().isWithinLatLonLimits()){
165
            return tile.getExtent(dc).intersects(
166
                dc.getView().getFrustumInModelCoordinates())
167
                && (dc.getVisibleSector() == null || dc.getVisibleSector()
168
                .intersects(tile.getSector()));
169
        } else {
170
            
171
            LOG.warn(
172
                "Tile sector is out of range Latitude {} {} Longitude {} {}. Trying to adjust sector",
173
                new Object[] { tile.getSector().getMinLatitude(),
174
                    tile.getSector().getMaxLatitude(),
175
                    tile.getSector().getMinLongitude(),
176
                    tile.getSector().getMaxLongitude() });
177
            
178
            // Try to fix extend. This is necessary to avoid problems getting if
179
            // some tile is visible or not when the tile has corrupt sector like
180
            // ~180.0000001 or -90.000000004561
181
            Extent extend = this.fixExtend(tile, dc);
182
            return extend.intersects(dc.getView()
183
                .getFrustumInModelCoordinates())
184
                && (dc.getVisibleSector() == null || dc.getVisibleSector()
185
                    .intersects(tile.getSector()));
186
        }
187
    }
188

  
189
    private Extent fixExtend(TextureTile tile, DrawContext dc) {
190
        
191
        if (dc == null) {
192
            String msg = Logging.getMessage("nullValue.DrawContextIsNull");
193
            Logging.logger().severe(msg);
194
            throw new IllegalArgumentException(msg);
195
        }
196
        
197
        if ( tile.getSector().isWithinLatLonLimits()){
198
            return Sector.computeBoundingBox(dc.getGlobe(),
199
                dc.getVerticalExaggeration(), tile.getSector());
200
        } else {
201
            
202
            double[] degreesArray = tile.getSector().asDegreesArray();
203
            
204
            double minLatitude =
205
                degreesArray[0] < Angle.NEG90.degrees ? Angle.NEG90.degrees
206
                    : degreesArray[0];
207
            double maxLatitude =
208
                degreesArray[1] > Angle.POS90.degrees ? Angle.POS90.degrees
209
                    : degreesArray[1];
210
            double minLongitude =
211
                degreesArray[2] < Angle.NEG180.degrees ? Angle.NEG180.degrees
212
                    : degreesArray[2];
213
            double maxLongitude =
214
                degreesArray[3] > Angle.POS180.degrees ? Angle.POS180.degrees
215
                    : degreesArray[3];
216
            
217
            Sector adjustedSector =
218
                new Sector(Angle.fromDegrees(minLatitude),
219
                    Angle.fromDegrees(maxLatitude),
220
                    Angle.fromDegrees(minLongitude),
221
                    Angle.fromDegrees(maxLongitude));
222
            
223
            return Sector.computeBoundingBox(dc.getGlobe(),
224
                dc.getVerticalExaggeration(), adjustedSector);
225
        }
226
    }
156 227
}

Also available in: Unified diff