use of gov.nasa.worldwind.util.TileUrlBuilder 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);
}
use of gov.nasa.worldwind.util.TileUrlBuilder 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);
}
use of gov.nasa.worldwind.util.TileUrlBuilder 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);
}
use of gov.nasa.worldwind.util.TileUrlBuilder in project hortonmachine by TheHortonMachine.
the class RasterizedShapefilesFolderNwwLayer method makeLevels.
private static LevelSet makeLevels(String title, File folderFile, GTRenderer renderer, Integer tileSize, boolean transparentBackground) throws MalformedURLException {
AVList params = new AVListImpl();
if (tileSize == null || tileSize < 256) {
tileSize = TILESIZE;
}
int finalTileSize = tileSize;
String tileFolderName = title == null ? folderFile.getName() : title;
String cacheRelativePath = "shapefilefolders/" + tileFolderName + "-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);
}
use of gov.nasa.worldwind.util.TileUrlBuilder in project hortonmachine by TheHortonMachine.
the class GeopackageTilesNwwLayer method makeLevels.
private static LevelSet makeLevels(File gpkgFile, GeopackageCommonDb gpkgDb, String tableName) throws Exception {
AVList params = new AVListImpl();
SqlName tName = SqlName.m(tableName);
String cacheRelativePath = "gpkg/" + gpkgFile.getName() + "-" + tName.name + "-tiles";
TileEntry tile = gpkgDb.tile(tName);
int tileSize = tile.getTileMatricies().get(0).getTileWidth();
String urlString = gpkgFile.toURI().toURL().toExternalForm();
params.setValue(AVKey.URL, urlString);
params.setValue(AVKey.TILE_WIDTH, tileSize);
params.setValue(AVKey.TILE_HEIGHT, tileSize);
params.setValue(AVKey.DATA_CACHE_NAME, cacheRelativePath);
params.setValue(AVKey.SERVICE, "*");
params.setValue(AVKey.DATASET_NAME, "*");
final String _imageFormat = "png";
params.setValue(AVKey.FORMAT_SUFFIX, "." + _imageFormat);
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();
}
List<Integer> tileZoomLevelsWithData = gpkgDb.getTileZoomLevelsWithData(tName);
params.setValue(AVKey.TILE_URL_BUILDER, new TileUrlBuilder() {
public URL getURL(Tile tile, String altImageFormat) throws MalformedURLException {
int zoom = tile.getLevelNumber() + 3;
// int x = tile.getColumn();
// int y = tile.getRow();
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[] zxy = MercatorUtils.getTileNumber(centerY, centerX, zoom);
int x = zxy[1];
int y = zxy[2];
try {
StringBuilder sb = new StringBuilder();
sb.append(zoom);
sb.append(File.separator);
sb.append(x);
File tileImageFolderFile = new File(cacheFolder, sb.toString());
if (!tileImageFolderFile.exists()) {
tileImageFolderFile.mkdirs();
}
sb = new StringBuilder();
sb.append(y);
sb.append(".");
sb.append(_imageFormat);
File imgFile = new File(tileImageFolderFile, sb.toString());
if (!imgFile.exists()) {
BufferedImage bImg = null;
byte[] bytes = gpkgDb.getTile(tName, x, y, zoom);
if (bytes != null) {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
bImg = ImageIO.read(bais);
} else {
// try downscaling from higher resolutions
// look in the other levels
int from = zoom + 1;
int to = Math.min(zoom + 5, 19);
for (int higherZoom = from; higherZoom < to; higherZoom++) {
if (!tileZoomLevelsWithData.contains(higherZoom)) {
continue;
}
BufferedImage img = TileUtilities.getTileFromDifferentZoomlevel(gpkgDb, tName.name, x, y, zoom, tileSize, higherZoom);
if (img != null) {
bImg = img;
break;
}
}
if (bImg == null) {
// then try upscaling from lower resolution
from = zoom - 1;
int zoomLevelTotry = 5;
to = Math.max(zoom - zoomLevelTotry, 1);
for (int lowerZoom = from; lowerZoom > to; lowerZoom--) {
if (!tileZoomLevelsWithData.contains(lowerZoom)) {
continue;
}
BufferedImage img = TileUtilities.getTileFromDifferentZoomlevel(gpkgDb, tName.name, x, y, zoom, tileSize, lowerZoom);
if (img != null) {
bImg = img;
break;
}
}
}
}
if (DEBUG) {
if (bImg == null && DEBUG_ALSO_WITHOUT_IMAGE) {
bImg = new BufferedImage(tileSize, tileSize, BufferedImage.TYPE_INT_ARGB);
}
if (bImg != null) {
Graphics2D g2d = (Graphics2D) bImg.getGraphics();
g2d.setColor(Color.black);
g2d.drawRect(0, 0, TILESIZE, TILESIZE);
g2d.drawString(zoom + "/" + x + "/" + y, 3, TILESIZE / 2);
g2d.dispose();
}
}
if (bImg != null) {
ImageIO.write(bImg, _imageFormat, imgFile);
} else {
return null;
}
}
return imgFile.toURI().toURL();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
});
return new LevelSet(params);
}
Aggregations