Add Tile LOD controls (#2958)
Co-authored-by: Bart Louwers <bart@emeel.net> Co-authored-by: Adrian Cojocaru <adrian.cojocaru92@yahoo.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -358,6 +358,101 @@ public final class MapLibreMap {
|
||||
return nativeMapView.getTileCacheEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @param radius minimum radius around the view point in unit of tiles in which the fine
|
||||
* grained zoom level tiles are always used when performing LOD
|
||||
* radius must be greater than 1 (At least 1 fine detailed tile is present)
|
||||
* A smaller radius value may improve performance at the cost of quality (tiles away from
|
||||
* camera use lower Zoom levels)
|
||||
*/
|
||||
public void setTileLodMinRadius(@FloatRange(from = 1, fromInclusive = true) double radius) {
|
||||
nativeMapView.setTileLodMinRadius(radius);
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @return minimum radius around the view point in unit of tiles in which the fine grained
|
||||
* zoom level tiles are always used when performing LOD
|
||||
* @see MapLibreMap#setTileLodMinRadius(double)
|
||||
*/
|
||||
public double getTileLodMinRadius() {
|
||||
return nativeMapView.getTileLodMinRadius();
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @param scale factor for the distance to the camera view point
|
||||
* A value larger than 1 increases the distance to the camera view point reducing LOD
|
||||
* Larger values may improve performance at the cost of quality (tiles away from camera
|
||||
* use lower Zoom levels)
|
||||
*/
|
||||
public void setTileLodScale(@FloatRange(from = 0, fromInclusive = false) double scale) {
|
||||
nativeMapView.setTileLodScale(scale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @return scale factor for the distance to the camera view point
|
||||
* @see MapLibreMap#setTileLodScale(double)
|
||||
*/
|
||||
public double getTileLodScale() {
|
||||
return nativeMapView.getTileLodScale();
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @param threshold pitch angle in radians above which LOD calculation is performed
|
||||
* A smaller radius value may improve performance at the cost of quality
|
||||
*/
|
||||
public void setTileLodPitchThreshold(@FloatRange(from = 0, to = Math.PI) double threshold) {
|
||||
nativeMapView.setTileLodPitchThreshold(threshold);
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @return pitch angle threshold in radians above which LOD calculation is performed
|
||||
* @see MapLibreMap#setTileLodPitchThreshold(double)
|
||||
*/
|
||||
public double getTileLodPitchThreshold() {
|
||||
return nativeMapView.getTileLodPitchThreshold();
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @param shift shift applied to the Zoom level during LOD calculation
|
||||
* A negative value shifts the Zoom level to a coarser level reducing quality but
|
||||
* improving performance
|
||||
* A positive value shifts the Zoom level to a finer level increasing details but
|
||||
* negatively affecting performance
|
||||
* A value of zero (default) does not apply any shift to the Zoom level
|
||||
* It is not recommended to change the default value unless performance is critical
|
||||
* and the loss of quality is acceptable. A value of -1 reduces the number of
|
||||
* displayed tiles by a factor of 4 on average
|
||||
* It is recommended to first configure the pixelRatio before adjusting
|
||||
* TileLodZoomShift. {@link MapLibreMapOptions#pixelRatio(float)}
|
||||
*/
|
||||
public void setTileLodZoomShift(double shift) {
|
||||
nativeMapView.setTileLodZoomShift(shift);
|
||||
}
|
||||
|
||||
/**
|
||||
* Camera based tile level of detail controls
|
||||
*
|
||||
* @return shift applied to the Zoom level during LOD calculation
|
||||
* @see MapLibreMap#setTileLodZoomShift(double)
|
||||
*/
|
||||
public double getTileLodZoomShift() {
|
||||
return nativeMapView.getTileLodZoomShift();
|
||||
}
|
||||
|
||||
//
|
||||
// MinZoom
|
||||
//
|
||||
|
||||
@@ -244,6 +244,22 @@ interface NativeMap {
|
||||
|
||||
boolean getTileCacheEnabled();
|
||||
|
||||
void setTileLodMinRadius(double radius);
|
||||
|
||||
double getTileLodMinRadius();
|
||||
|
||||
void setTileLodScale(double scale);
|
||||
|
||||
double getTileLodScale();
|
||||
|
||||
void setTileLodPitchThreshold(double threshold);
|
||||
|
||||
double getTileLodPitchThreshold();
|
||||
|
||||
void setTileLodZoomShift(double shift);
|
||||
|
||||
double getTileLodZoomShift();
|
||||
|
||||
void setGestureInProgress(boolean inProgress);
|
||||
|
||||
float getPixelRatio();
|
||||
|
||||
@@ -855,6 +855,70 @@ final class NativeMapView implements NativeMap {
|
||||
}
|
||||
return nativeGetTileCacheEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTileLodMinRadius(double radius) {
|
||||
if (checkState("setTileLodMinRadius")) {
|
||||
return;
|
||||
}
|
||||
nativeSetTileLodMinRadius(radius);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTileLodMinRadius() {
|
||||
if (checkState("getTileLodMinRadius")) {
|
||||
return 0;
|
||||
}
|
||||
return nativeGetTileLodMinRadius();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTileLodScale(double scale) {
|
||||
if (checkState("setTileLodScale")) {
|
||||
return;
|
||||
}
|
||||
nativeSetTileLodScale(scale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTileLodScale() {
|
||||
if (checkState("getTileLodScale")) {
|
||||
return 0;
|
||||
}
|
||||
return nativeGetTileLodScale();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTileLodPitchThreshold(double threshold) {
|
||||
if (checkState("setTileLodPitchThreshold")) {
|
||||
return;
|
||||
}
|
||||
nativeSetTileLodPitchThreshold(threshold);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTileLodPitchThreshold() {
|
||||
if (checkState("getTileLodPitchThreshold")) {
|
||||
return 0;
|
||||
}
|
||||
return nativeGetTileLodPitchThreshold();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTileLodZoomShift(double shift) {
|
||||
if (checkState("setTileLodZoomShift")) {
|
||||
return;
|
||||
}
|
||||
nativeSetTileLodZoomShift(shift);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTileLodZoomShift() {
|
||||
if (checkState("getTileLodZoomShift")) {
|
||||
return 0;
|
||||
}
|
||||
return nativeGetTileLodZoomShift();
|
||||
}
|
||||
// Runtime style Api
|
||||
|
||||
@Override
|
||||
@@ -1644,6 +1708,30 @@ final class NativeMapView implements NativeMap {
|
||||
@Keep
|
||||
private native int nativeGetPrefetchZoomDelta();
|
||||
|
||||
@Keep
|
||||
private native void nativeSetTileLodMinRadius(double radius);
|
||||
|
||||
@Keep
|
||||
private native double nativeGetTileLodMinRadius();
|
||||
|
||||
@Keep
|
||||
private native void nativeSetTileLodScale(double scale);
|
||||
|
||||
@Keep
|
||||
private native double nativeGetTileLodScale();
|
||||
|
||||
@Keep
|
||||
private native void nativeSetTileLodPitchThreshold(double threshold);
|
||||
|
||||
@Keep
|
||||
private native double nativeGetTileLodPitchThreshold();
|
||||
|
||||
@Keep
|
||||
private native void nativeSetTileLodZoomShift(double shift);
|
||||
|
||||
@Keep
|
||||
private native double nativeGetTileLodZoomShift();
|
||||
|
||||
@Override
|
||||
public long getNativePtr() {
|
||||
return nativePtr;
|
||||
|
||||
Reference in New Issue
Block a user