
org.oscim.tiling.TileSource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vtm Show documentation
Show all versions of vtm Show documentation
OpenGL vector map library written in Java - running on Android, iOS, Desktop and within the browser.
/*
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see .
*/
package org.oscim.tiling;
import org.oscim.layers.tile.bitmap.BitmapTileLayer.FadeStep;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.map.Viewport;
import java.util.HashMap;
public abstract class TileSource {
public abstract static class Builder> {
protected float alpha = 1;
protected int zoomMin = Viewport.MIN_ZOOM_LEVEL;
protected int zoomMax = Viewport.MAX_ZOOM_LEVEL;
protected int overZoom = BuildingLayer.MIN_ZOOM;
protected FadeStep[] fadeSteps;
protected String name;
protected int tileSize = 256;
public T alpha(float alpha) {
this.alpha = alpha;
return self();
}
public T zoomMin(int zoom) {
zoomMin = zoom;
return self();
}
public T zoomMax(int zoom) {
zoomMax = zoom;
return self();
}
public T overZoom(int zoom) {
overZoom = zoom;
return self();
}
public T fadeSteps(FadeStep[] fadeSteps) {
this.fadeSteps = fadeSteps;
return self();
}
public T name(String name) {
this.name = name;
return self();
}
public T tileSize(int tileSize) {
this.tileSize = tileSize;
return self();
}
@SuppressWarnings("unchecked")
protected T self() {
return (T) this;
}
public abstract TileSource build();
public String getName() {
return name;
}
}
protected float mAlpha = 1;
protected int mZoomMin = Viewport.MIN_ZOOM_LEVEL;
protected int mZoomMax = Viewport.MAX_ZOOM_LEVEL;
protected int mOverZoom = BuildingLayer.MIN_ZOOM;
protected FadeStep[] mFadeSteps;
protected String mName;
protected int mTileSize = 256;
protected final Options options = new Options();
public ITileCache tileCache;
protected TileSource() {
}
protected TileSource(int zoomMin, int zoomMax) {
this(zoomMin, zoomMax, zoomMax);
}
protected TileSource(int zoomMin, int zoomMax, int overZoom) {
mZoomMin = zoomMin;
mZoomMax = zoomMax;
mOverZoom = overZoom;
}
public TileSource(Builder> builder) {
mAlpha = builder.alpha;
mZoomMin = builder.zoomMin;
mZoomMax = builder.zoomMax;
mOverZoom = builder.overZoom;
mFadeSteps = builder.fadeSteps;
mName = builder.name;
mTileSize = builder.tileSize;
}
public abstract ITileDataSource getDataSource();
public abstract OpenResult open();
public abstract void close();
public float getAlpha() {
return mAlpha;
}
/**
* Cache MUST be set before TileSource is added to a TileLayer!
*/
public void setCache(ITileCache cache) {
tileCache = cache;
}
public int getZoomLevelMax() {
return mZoomMax;
}
public int getZoomLevelMin() {
return mZoomMin;
}
public int getOverZoom() {
return mOverZoom;
}
public void setFadeSteps(FadeStep[] fadeSteps) {
mFadeSteps = fadeSteps;
}
public FadeStep[] getFadeSteps() {
return mFadeSteps;
}
public String getName() {
return mName;
}
public int getTileSize() {
return mTileSize;
}
public TileSource setOption(String key, String value) {
options.put(key, value);
return this;
}
public String getOption(String key) {
return options.get(key);
}
public static class Options extends HashMap {
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object other) {
if (!(other instanceof Options))
return false;
//if (this.db != ((MapOptions) other).db)
// return false;
// FIXME test if this is correct!
if (!this.entrySet().equals(((Options) other).entrySet()))
return false;
return true;
}
}
/**
* A FileOpenResult is a simple DTO which is returned by
* IMapDatabase#open().
*/
public static class OpenResult {
/**
* Singleton for a FileOpenResult instance with {@code success=true}.
*/
public static final OpenResult SUCCESS = new OpenResult();
private final String errorMessage;
private final boolean success;
/**
* @param errorMessage a textual message describing the error.
*/
public OpenResult(String errorMessage) {
if (errorMessage == null) {
errorMessage = "error";
}
this.success = false;
this.errorMessage = errorMessage;
}
public OpenResult() {
this.success = true;
this.errorMessage = null;
}
/**
* @return a textual error description (might be null).
*/
public String getErrorMessage() {
return this.errorMessage;
}
/**
* @return true if the file could be opened successfully, false
* otherwise.
*/
public boolean isSuccess() {
return this.success;
}
@Override
public String toString() {
return new StringBuilder()
.append("FileOpenResult [success=")
.append(this.success)
.append(", errorMessage=")
.append(this.errorMessage)
.append("]")
.toString();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy