Search in sources :

Example 1 with LatLon

use of gov.nasa.worldwind.geom.LatLon in project hortonmachine by TheHortonMachine.

the class ViewControlsSelectListener method updateView.

protected void updateView(ScreenAnnotation control, String controlType) {
    if (this.wwd == null)
        return;
    if (!(this.wwd.getView() instanceof OrbitView))
        return;
    OrbitView view = (OrbitView) this.wwd.getView();
    view.stopAnimations();
    view.stopMovement();
    if (controlType.equals(AVKey.VIEW_PAN)) {
        resetOrbitView(view);
        // Go some distance in the control mouse direction
        Angle heading = computePanHeading(view, control);
        Angle distance = computePanAmount(this.wwd.getModel().getGlobe(), view, control, panStep);
        LatLon newViewCenter = LatLon.greatCircleEndPosition(view.getCenterPosition(), heading, distance);
        // Turn around if passing by a pole - TODO: better handling of the pole crossing situation
        if (this.isPathCrossingAPole(newViewCenter, view.getCenterPosition()))
            view.setHeading(Angle.POS180.subtract(view.getHeading()));
        // Set new center pos
        view.setCenterPosition(new Position(newViewCenter, view.getCenterPosition().getElevation()));
    } else if (controlType.equals(AVKey.VIEW_LOOK)) {
        setupFirstPersonView(view);
        Angle heading = computeLookHeading(view, control, headingStep);
        Angle pitch = computeLookPitch(view, control, pitchStep);
        // Check whether the view will still point at terrain
        Vec4 surfacePoint = computeSurfacePoint(view, heading, pitch);
        if (surfacePoint != null) {
            // Change view state
            // Save current eye position
            final Position eyePos = view.getEyePosition();
            view.setHeading(heading);
            view.setPitch(pitch);
            view.setZoom(0);
            // Set center at the eye position
            view.setCenterPosition(eyePos);
        }
    } else if (controlType.equals(AVKey.VIEW_ZOOM_IN)) {
        resetOrbitView(view);
        view.setZoom(computeNewZoom(view, -zoomStep));
    } else if (controlType.equals(AVKey.VIEW_ZOOM_OUT)) {
        resetOrbitView(view);
        view.setZoom(computeNewZoom(view, zoomStep));
    } else if (controlType.equals(AVKey.VIEW_HEADING_LEFT)) {
        resetOrbitView(view);
        view.setHeading(view.getHeading().addDegrees(headingStep));
    } else if (controlType.equals(AVKey.VIEW_HEADING_RIGHT)) {
        resetOrbitView(view);
        view.setHeading(view.getHeading().addDegrees(-headingStep));
    } else if (controlType.equals(AVKey.VIEW_PITCH_UP)) {
        resetOrbitView(view);
        if (view.getPitch().degrees >= pitchStep)
            view.setPitch(view.getPitch().addDegrees(-pitchStep));
    } else if (controlType.equals(AVKey.VIEW_PITCH_DOWN)) {
        resetOrbitView(view);
        if (view.getPitch().degrees <= 90 - pitchStep)
            view.setPitch(view.getPitch().addDegrees(pitchStep));
    } else if (controlType.equals(AVKey.VIEW_FOV_NARROW)) {
        if (view.getFieldOfView().degrees / fovStep >= 4)
            view.setFieldOfView(view.getFieldOfView().divide(fovStep));
    } else if (controlType.equals(AVKey.VIEW_FOV_WIDE)) {
        if (view.getFieldOfView().degrees * fovStep < 120)
            view.setFieldOfView(view.getFieldOfView().multiply(fovStep));
    } else if (controlType.equals(AVKey.VERTICAL_EXAGGERATION_UP)) {
        SceneController sc = this.wwd.getSceneController();
        sc.setVerticalExaggeration(sc.getVerticalExaggeration() + this.veStep);
    } else if (controlType.equals(AVKey.VERTICAL_EXAGGERATION_DOWN)) {
        SceneController sc = this.wwd.getSceneController();
        sc.setVerticalExaggeration(Math.max(1d, sc.getVerticalExaggeration() - this.veStep));
    }
    view.firePropertyChange(AVKey.VIEW, null, view);
}
Also used : OrbitView(gov.nasa.worldwind.view.orbit.OrbitView) LatLon(gov.nasa.worldwind.geom.LatLon) SceneController(gov.nasa.worldwind.SceneController) Angle(gov.nasa.worldwind.geom.Angle) Position(gov.nasa.worldwind.geom.Position) Vec4(gov.nasa.worldwind.geom.Vec4)

Example 2 with LatLon

use of gov.nasa.worldwind.geom.LatLon in project hortonmachine by TheHortonMachine.

the class MapsforgeNwwLayer method makeLevels.

private static LevelSet makeLevels(String layerName, OsmTilegenerator osmTilegenerator, Integer tileSize) throws MalformedURLException {
    AVList params = new AVListImpl();
    String cacheRelativePath = "mapsforge/" + layerName + "-tiles";
    if (tileSize == null || tileSize < 256) {
        tileSize = TILESIZE;
    }
    int finalTileSize = tileSize;
    params.setValue(AVKey.URL, cacheRelativePath);
    params.setValue(AVKey.TILE_WIDTH, finalTileSize);
    params.setValue(AVKey.TILE_HEIGHT, finalTileSize);
    params.setValue(AVKey.DATA_CACHE_NAME, cacheRelativePath);
    params.setValue(AVKey.SERVICE, "*");
    params.setValue(AVKey.DATASET_NAME, "*");
    params.setValue(AVKey.FORMAT_SUFFIX, ".png");
    params.setValue(AVKey.NUM_LEVELS, 22);
    params.setValue(AVKey.NUM_EMPTY_LEVELS, 0);
    params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, new LatLon(Angle.fromDegrees(22.5d), Angle.fromDegrees(45d)));
    params.setValue(AVKey.SECTOR, new MercatorSector(-1.0, 1.0, Angle.NEG180, Angle.POS180));
    File cacheRoot = CacheUtils.getCacheRoot();
    final File cacheFolder = new File(cacheRoot, cacheRelativePath);
    if (!cacheFolder.exists()) {
        cacheFolder.mkdirs();
    }
    params.setValue(AVKey.TILE_URL_BUILDER, new TileUrlBuilder() {

        public URL getURL(Tile tile, String altImageFormat) throws MalformedURLException {
            int zoom = tile.getLevelNumber() + 3;
            Sector sector = tile.getSector();
            double north = sector.getMaxLatitude().degrees;
            double south = sector.getMinLatitude().degrees;
            double east = sector.getMaxLongitude().degrees;
            double west = sector.getMinLongitude().degrees;
            double centerX = west + (east - west) / 2.0;
            double centerY = south + (north - south) / 2.0;
            int[] tileNumber = NwwUtilities.getTileNumber(centerY, centerX, zoom);
            int x = tileNumber[0];
            int y = tileNumber[1];
            File tileImageFolderFile = new File(cacheFolder, zoom + File.separator + x);
            if (!tileImageFolderFile.exists()) {
                tileImageFolderFile.mkdirs();
            }
            File imgFile = new File(tileImageFolderFile, y + ".png");
            try {
                if (!imgFile.exists()) {
                    BufferedImage bImg = osmTilegenerator.getImage(zoom, x, y);
                    // PrintUtilities.printRenderedImageData(bImg);
                    ImageIO.write(bImg, "png", imgFile);
                }
                return imgFile.toURI().toURL();
            } catch (IOException e) {
                return null;
            }
        }
    });
    return new LevelSet(params);
}
Also used : MalformedURLException(java.net.MalformedURLException) Sector(gov.nasa.worldwind.geom.Sector) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) Tile(gov.nasa.worldwind.util.Tile) IOException(java.io.IOException) URL(java.net.URL) BufferedImage(java.awt.image.BufferedImage) LatLon(gov.nasa.worldwind.geom.LatLon) LevelSet(gov.nasa.worldwind.util.LevelSet) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) AVList(gov.nasa.worldwind.avlist.AVList) MapFile(org.mapsforge.map.reader.MapFile) File(java.io.File) TileUrlBuilder(gov.nasa.worldwind.util.TileUrlBuilder) AVListImpl(gov.nasa.worldwind.avlist.AVListImpl)

Example 3 with LatLon

use of gov.nasa.worldwind.geom.LatLon in project hortonmachine by TheHortonMachine.

the class OSMMapnikLayer method makeLevels.

private static LevelSet makeLevels() {
    AVList params = new AVListImpl();
    params.setValue(AVKey.TILE_WIDTH, 256);
    params.setValue(AVKey.TILE_HEIGHT, 256);
    params.setValue(AVKey.DATA_CACHE_NAME, "Earth/OSM-Mercator/OpenStreetMap OpentopoMap");
    params.setValue(AVKey.SERVICE, "https://tile.openstreetmap.org/");
    params.setValue(AVKey.DATASET_NAME, "h");
    params.setValue(AVKey.FORMAT_SUFFIX, ".png");
    params.setValue(AVKey.NUM_LEVELS, 22);
    params.setValue(AVKey.NUM_EMPTY_LEVELS, 0);
    params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, new LatLon(Angle.fromDegrees(22.5d), Angle.fromDegrees(45d)));
    params.setValue(AVKey.SECTOR, new MercatorSector(-1.0, 1.0, Angle.NEG180, Angle.POS180));
    params.setValue(AVKey.TILE_URL_BUILDER, new URLBuilder());
    return new LevelSet(params);
}
Also used : LatLon(gov.nasa.worldwind.geom.LatLon) LevelSet(gov.nasa.worldwind.util.LevelSet) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) AVList(gov.nasa.worldwind.avlist.AVList) AVListImpl(gov.nasa.worldwind.avlist.AVListImpl)

Example 4 with LatLon

use of gov.nasa.worldwind.geom.LatLon in project hortonmachine by TheHortonMachine.

the class RasterizedSpatialiteLasLayer method makeLevels.

private static LevelSet makeLevels(String title, Integer tileSize, boolean transparentBackground, ASpatialDb db, boolean doIntensity) throws Exception {
    String plus = doIntensity ? INTENSITY : ELEVATION;
    String cacheRelativePath = "rasterized_spatialites/" + title + "_" + plus + "-tiles";
    File cacheRoot = CacheUtils.getCacheRoot();
    final File cacheFolder = new File(cacheRoot, cacheRelativePath);
    if (!cacheFolder.exists()) {
        cacheFolder.mkdirs();
    }
    CacheUtils.clearCacheBySourceName(cacheRelativePath);
    AVList params = new AVListImpl();
    if (tileSize == null || tileSize < 256) {
        tileSize = TILESIZE;
    }
    int finalTileSize = tileSize;
    GeometryColumn spatialiteGeometryColumns = db.getGeometryColumnsForTable(LasCellsTable.TABLENAME);
    CoordinateReferenceSystem dataCrs = CRS.decode("EPSG:" + spatialiteGeometryColumns.srid);
    CoordinateReferenceSystem nwwCRS = DefaultGeographicCRS.WGS84;
    List<LasSource> lasSources = LasSourcesTable.getLasSources(db);
    double min = Double.POSITIVE_INFINITY;
    double max = Double.NEGATIVE_INFINITY;
    List<Polygon> polList = new ArrayList<>();
    ColorInterpolator colorInterp;
    int lasLevels = 0;
    if (!doIntensity) {
        for (LasSource lasSource : lasSources) {
            lasLevels = lasSource.levels;
            polList.add(lasSource.polygon);
            min = Math.min(min, lasSource.minElev);
            max = Math.max(max, lasSource.maxElev);
        }
        colorInterp = new ColorInterpolator(EColorTables.elev.name(), min, max, null);
    } else {
        for (LasSource lasSource : lasSources) {
            lasLevels = lasSource.levels;
            polList.add(lasSource.polygon);
            min = Math.min(min, lasSource.minIntens);
            max = Math.max(max, lasSource.maxIntens);
        }
        colorInterp = new ColorInterpolator(EColorTables.rainbow.name(), 0, 255, null);
    }
    final int _lasLevels = lasLevels;
    Geometry sourcesUnionData = CascadedPolygonUnion.union(polList);
    PreparedGeometry preparedCoverage = PreparedGeometryFactory.prepare(sourcesUnionData);
    MathTransform nww2DataTransform = CRS.findMathTransform(nwwCRS, dataCrs);
    MathTransform data2NwwTransform = CRS.findMathTransform(dataCrs, nwwCRS);
    // String urlString = folderFile.toURI().toURL().toExternalForm();
    // params.setValue(AVKey.URL, urlString);
    params.setValue(AVKey.TILE_WIDTH, finalTileSize);
    params.setValue(AVKey.TILE_HEIGHT, finalTileSize);
    params.setValue(AVKey.DATA_CACHE_NAME, cacheRelativePath);
    params.setValue(AVKey.SERVICE, "*");
    params.setValue(AVKey.DATASET_NAME, "*");
    params.setValue(AVKey.FORMAT_SUFFIX, ".png");
    params.setValue(AVKey.NUM_LEVELS, 22);
    params.setValue(AVKey.NUM_EMPTY_LEVELS, 8);
    params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, new LatLon(Angle.fromDegrees(22.5d), Angle.fromDegrees(45d)));
    params.setValue(AVKey.SECTOR, new MercatorSector(-1.0, 1.0, Angle.NEG180, Angle.POS180));
    params.setValue(AVKey.TILE_URL_BUILDER, new TileUrlBuilder() {

        public URL getURL(Tile tile, String altImageFormat) throws MalformedURLException {
            try {
                int zoom = tile.getLevelNumber() + 3;
                Sector sector = tile.getSector();
                double north = sector.getMaxLatitude().degrees;
                double south = sector.getMinLatitude().degrees;
                double east = sector.getMaxLongitude().degrees;
                double west = sector.getMinLongitude().degrees;
                double centerX = west + (east - west) / 2.0;
                double centerY = south + (north - south) / 2.0;
                int[] tileNumber = NwwUtilities.getTileNumber(centerY, centerX, zoom);
                int x = tileNumber[0];
                int y = tileNumber[1];
                Rectangle imageBounds = new Rectangle(0, 0, finalTileSize, finalTileSize);
                ReferencedEnvelope tileEnvNww = new ReferencedEnvelope(west, east, south, north, DefaultGeographicCRS.WGS84);
                AffineTransform worldToPixel = TransformationUtils.getWorldToPixel(tileEnvNww, imageBounds);
                PointTransformation pointTransformation = new PointTransformation() {

                    @Override
                    public void transform(Coordinate src, Point2D dest) {
                        worldToPixel.transform(new Point2D.Double(src.x, src.y), dest);
                    }
                };
                Polygon polygonNww = GeometryUtilities.createPolygonFromEnvelope(tileEnvNww);
                Geometry polygonData = JTS.transform(polygonNww, nww2DataTransform);
                int imgType;
                Color backgroundColor;
                boolean intersects = preparedCoverage.intersects(polygonData);
                if (transparentBackground || !intersects) {
                    imgType = BufferedImage.TYPE_INT_ARGB;
                    backgroundColor = new Color(Color.WHITE.getRed(), Color.WHITE.getGreen(), Color.WHITE.getBlue(), 0);
                } else {
                    imgType = BufferedImage.TYPE_INT_RGB;
                    backgroundColor = Color.WHITE;
                }
                BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, imgType);
                Graphics2D gr = image.createGraphics();
                gr.setPaint(backgroundColor);
                gr.fill(imageBounds);
                if (zoom < 12) {
                    Geometry sourcesUnionNww = JTS.transform(sourcesUnionData, data2NwwTransform);
                    drawSources(db, pointTransformation, sourcesUnionNww, gr, finalTileSize);
                } else if (zoom < 14) {
                    drawLevels(db, colorInterp, pointTransformation, polygonData, gr, _lasLevels, data2NwwTransform, doIntensity, finalTileSize);
                } else if (zoom < 15 && _lasLevels - 1 > 0) {
                    drawLevels(db, colorInterp, pointTransformation, polygonData, gr, _lasLevels - 1, data2NwwTransform, doIntensity, finalTileSize);
                } else if (zoom < 17 && _lasLevels - 2 > 0) {
                    drawLevels(db, colorInterp, pointTransformation, polygonData, gr, _lasLevels - 2, data2NwwTransform, doIntensity, finalTileSize);
                } else if (zoom > 18) {
                    drawPoints(db, colorInterp, pointTransformation, polygonData, gr, data2NwwTransform, doIntensity, finalTileSize);
                } else {
                    drawCells(db, colorInterp, pointTransformation, polygonData, gr, data2NwwTransform, doIntensity, finalTileSize);
                }
                File tileImageFolderFile = new File(cacheFolder, zoom + File.separator + x);
                if (!tileImageFolderFile.exists()) {
                    tileImageFolderFile.mkdirs();
                }
                File imgFile = new File(tileImageFolderFile, y + ".png");
                if (!imgFile.exists()) {
                    ImageIO.write(image, "png", imgFile);
                }
                return imgFile.toURI().toURL();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    });
    return new LevelSet(params);
}
Also used : MalformedURLException(java.net.MalformedURLException) MathTransform(org.opengis.referencing.operation.MathTransform) ArrayList(java.util.ArrayList) Rectangle(java.awt.Rectangle) URL(java.net.URL) BufferedImage(java.awt.image.BufferedImage) ReferencedEnvelope(org.geotools.geometry.jts.ReferencedEnvelope) LevelSet(gov.nasa.worldwind.util.LevelSet) Point2D(java.awt.geom.Point2D) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) GeometryColumn(org.hortonmachine.dbs.compat.GeometryColumn) CoordinateReferenceSystem(org.opengis.referencing.crs.CoordinateReferenceSystem) Polygon(org.locationtech.jts.geom.Polygon) TileUrlBuilder(gov.nasa.worldwind.util.TileUrlBuilder) AVListImpl(gov.nasa.worldwind.avlist.AVListImpl) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) Sector(gov.nasa.worldwind.geom.Sector) Color(java.awt.Color) PointTransformation(org.locationtech.jts.awt.PointTransformation) Tile(gov.nasa.worldwind.util.Tile) ColorInterpolator(org.hortonmachine.gears.utils.colors.ColorInterpolator) MalformedURLException(java.net.MalformedURLException) Graphics2D(java.awt.Graphics2D) PreparedGeometry(org.locationtech.jts.geom.prep.PreparedGeometry) Geometry(org.locationtech.jts.geom.Geometry) LatLon(gov.nasa.worldwind.geom.LatLon) PreparedGeometry(org.locationtech.jts.geom.prep.PreparedGeometry) Coordinate(org.locationtech.jts.geom.Coordinate) AVList(gov.nasa.worldwind.avlist.AVList) AffineTransform(java.awt.geom.AffineTransform) File(java.io.File) LasSource(org.hortonmachine.gears.io.las.databases.LasSource)

Example 5 with LatLon

use of gov.nasa.worldwind.geom.LatLon in project hortonmachine by TheHortonMachine.

the class RasterizedFeatureCollectionLayer method makeLevels.

private static LevelSet makeLevels(String title, GTRenderer renderer, Integer tileSize, boolean transparentBackground) throws MalformedURLException {
    AVList params = new AVListImpl();
    if (tileSize == null || tileSize < 256) {
        tileSize = TILESIZE;
    }
    int finalTileSize = tileSize;
    String cacheRelativePath = "rasterized_featurecollections/" + title + "-tiles";
    // String urlString = folderFile.toURI().toURL().toExternalForm();
    // params.setValue(AVKey.URL, urlString);
    params.setValue(AVKey.TILE_WIDTH, finalTileSize);
    params.setValue(AVKey.TILE_HEIGHT, finalTileSize);
    params.setValue(AVKey.DATA_CACHE_NAME, cacheRelativePath);
    params.setValue(AVKey.SERVICE, "*");
    params.setValue(AVKey.DATASET_NAME, "*");
    params.setValue(AVKey.FORMAT_SUFFIX, ".png");
    params.setValue(AVKey.NUM_LEVELS, 22);
    params.setValue(AVKey.NUM_EMPTY_LEVELS, 0);
    params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, new LatLon(Angle.fromDegrees(22.5d), Angle.fromDegrees(45d)));
    params.setValue(AVKey.SECTOR, new MercatorSector(-1.0, 1.0, Angle.NEG180, Angle.POS180));
    File cacheRoot = CacheUtils.getCacheRoot();
    final File cacheFolder = new File(cacheRoot, cacheRelativePath);
    if (!cacheFolder.exists()) {
        cacheFolder.mkdirs();
    }
    params.setValue(AVKey.TILE_URL_BUILDER, new TileUrlBuilder() {

        public URL getURL(Tile tile, String altImageFormat) throws MalformedURLException {
            int zoom = tile.getLevelNumber() + 3;
            Sector sector = tile.getSector();
            double north = sector.getMaxLatitude().degrees;
            double south = sector.getMinLatitude().degrees;
            double east = sector.getMaxLongitude().degrees;
            double west = sector.getMinLongitude().degrees;
            double centerX = west + (east - west) / 2.0;
            double centerY = south + (north - south) / 2.0;
            int[] tileNumber = NwwUtilities.getTileNumber(centerY, centerX, zoom);
            int x = tileNumber[0];
            int y = tileNumber[1];
            Rectangle imageBounds = new Rectangle(0, 0, finalTileSize, finalTileSize);
            int imgType;
            Color backgroundColor;
            if (transparentBackground) {
                imgType = BufferedImage.TYPE_INT_ARGB;
                backgroundColor = new Color(Color.WHITE.getRed(), Color.WHITE.getGreen(), Color.WHITE.getBlue(), 0);
            } else {
                imgType = BufferedImage.TYPE_INT_RGB;
                backgroundColor = Color.WHITE;
            }
            BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, imgType);
            Graphics2D gr = image.createGraphics();
            gr.setPaint(backgroundColor);
            gr.fill(imageBounds);
            gr.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            try {
                synchronized (renderer) {
                    renderer.paint(gr, imageBounds, new ReferencedEnvelope(west, east, south, north, DefaultGeographicCRS.WGS84));
                    File tileImageFolderFile = new File(cacheFolder, zoom + File.separator + x);
                    if (!tileImageFolderFile.exists()) {
                        tileImageFolderFile.mkdirs();
                    }
                    File imgFile = new File(tileImageFolderFile, y + ".png");
                    if (!imgFile.exists()) {
                        ImageIO.write(image, "png", imgFile);
                    }
                    return imgFile.toURI().toURL();
                }
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    });
    return new LevelSet(params);
}
Also used : MalformedURLException(java.net.MalformedURLException) Sector(gov.nasa.worldwind.geom.Sector) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) Color(java.awt.Color) Rectangle(java.awt.Rectangle) Tile(gov.nasa.worldwind.util.Tile) IOException(java.io.IOException) URL(java.net.URL) BufferedImage(java.awt.image.BufferedImage) Graphics2D(java.awt.Graphics2D) LatLon(gov.nasa.worldwind.geom.LatLon) ReferencedEnvelope(org.geotools.geometry.jts.ReferencedEnvelope) LevelSet(gov.nasa.worldwind.util.LevelSet) MercatorSector(gov.nasa.worldwind.layers.mercator.MercatorSector) AVList(gov.nasa.worldwind.avlist.AVList) File(java.io.File) TileUrlBuilder(gov.nasa.worldwind.util.TileUrlBuilder) AVListImpl(gov.nasa.worldwind.avlist.AVListImpl)

Aggregations

LatLon (gov.nasa.worldwind.geom.LatLon)18 AVList (gov.nasa.worldwind.avlist.AVList)14 AVListImpl (gov.nasa.worldwind.avlist.AVListImpl)14 MercatorSector (gov.nasa.worldwind.layers.mercator.MercatorSector)14 LevelSet (gov.nasa.worldwind.util.LevelSet)14 Tile (gov.nasa.worldwind.util.Tile)11 TileUrlBuilder (gov.nasa.worldwind.util.TileUrlBuilder)11 BufferedImage (java.awt.image.BufferedImage)11 File (java.io.File)11 MalformedURLException (java.net.MalformedURLException)11 URL (java.net.URL)11 Sector (gov.nasa.worldwind.geom.Sector)9 Graphics2D (java.awt.Graphics2D)9 Rectangle (java.awt.Rectangle)6 IOException (java.io.IOException)6 ReferencedEnvelope (org.geotools.geometry.jts.ReferencedEnvelope)6 Color (java.awt.Color)4 Coordinate (org.locationtech.jts.geom.Coordinate)3 Angle (gov.nasa.worldwind.geom.Angle)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2