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 |
}
|