Distant labels rendering (#844)

This commit is contained in:
Александр 2021-05-17 16:18:20 +03:00 committed by Emux
parent c508bde844
commit 08b94a0c42
No known key found for this signature in database
GPG Key ID: 64ED9980896038C3
2 changed files with 20 additions and 3 deletions

View File

@ -2,6 +2,7 @@
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2019 devemux86
* Copyright 2018 Gustl22 * Copyright 2018 Gustl22
* Copyright 2021 blakfast
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@ -31,6 +32,7 @@ import org.oscim.renderer.bucket.SymbolItem;
import org.oscim.renderer.bucket.TextItem; import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.TextStyle; import org.oscim.theme.styles.TextStyle;
import org.oscim.utils.FastMath; import org.oscim.utils.FastMath;
import org.oscim.utils.Parameters;
import org.oscim.utils.geom.OBB2D; import org.oscim.utils.geom.OBB2D;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -49,6 +51,7 @@ public class LabelPlacement {
return (LabelTileData) tile.getData(LabelLayer.LABEL_DATA); return (LabelTileData) tile.getData(LabelLayer.LABEL_DATA);
} }
private static final float DISTANCE_COEFFICIENT = 3;
private static final float MIN_CAPTION_DIST = 5; private static final float MIN_CAPTION_DIST = 5;
private static final float MIN_WAY_DIST = 3; private static final float MIN_WAY_DIST = 3;
@ -352,9 +355,18 @@ public class LabelPlacement {
} }
/* estimation for visible area to be labeled */ /* estimation for visible area to be labeled */
int mw = (mMap.getWidth() + Tile.SIZE) / 2; if (Parameters.DISTANT_LABELS) {
int mh = (mMap.getHeight() + Tile.SIZE) / 2; int mw = mMap.getWidth();
mSquareRadius = mw * mw + mh * mh; int mh = mMap.getHeight();
float k = pos.tilt / mMap.viewport().getMaxTilt() * DISTANCE_COEFFICIENT;
if (k < 0.5)
k = 0.5f;
mSquareRadius = (mw * mw + mh * mh) * k;
} else {
int mw = (mMap.getWidth() + Tile.SIZE) / 2;
int mh = (mMap.getHeight() + Tile.SIZE) / 2;
mSquareRadius = mw * mw + mh * mh;
}
/* scale of tiles zoom-level relative to current position */ /* scale of tiles zoom-level relative to current position */
double scale = pos.scale / (1 << zoom); double scale = pos.scale / (1 << zoom);

View File

@ -33,6 +33,11 @@ public final class Parameters {
*/ */
public static boolean CUSTOM_TILE_SIZE = false; public static boolean CUSTOM_TILE_SIZE = false;
/**
* Rendering of distant labels.
*/
public static boolean DISTANT_LABELS = false;
/** /**
* If true the <code>MapEventLayer2</code> will be used instead of default <code>MapEventLayer</code>. * If true the <code>MapEventLayer2</code> will be used instead of default <code>MapEventLayer</code>.
*/ */