This commit is contained in:
Hannes Janetzek 2014-01-31 03:43:49 +01:00
parent f631e6736f
commit e99200cd61
7 changed files with 44 additions and 32 deletions

View File

@ -283,7 +283,7 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
mPrevPinchWidth = pinchWidth; mPrevPinchWidth = pinchWidth;
} }
} }
} else if (mDoScale) { } else if (mDoScale && mEnableRotate) {
// reenable rotation when higher threshold is reached // reenable rotation when higher threshold is reached
double rad = Math.atan2(dy, dx); double rad = Math.atan2(dy, dx);
double r = rad - mAngle; double r = rad - mAngle;
@ -321,12 +321,13 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
synchronized (mViewport) { synchronized (mViewport) {
if (!mDoTilt) { if (!mDoTilt) {
mViewport.moveMap(mx, my);
if (rotateBy != 0) if (rotateBy != 0)
mViewport.rotateMap(rotateBy, fx, fy); mViewport.rotateMap(rotateBy, fx, fy);
if (scaleBy != 1) if (scaleBy != 1)
mViewport.scaleMap(scaleBy, fx, fy); mViewport.scaleMap(scaleBy, fx, fy);
mViewport.moveMap(mx, my);
} else { } else {
if (tiltBy != 0) { if (tiltBy != 0) {
mViewport.moveMap(0, my / 2); mViewport.moveMap(0, my / 2);
@ -334,12 +335,14 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
} }
} }
} }
mMap.updateMap(true);
mPrevX1 = x1; mPrevX1 = x1;
mPrevY1 = y1; mPrevY1 = y1;
mPrevX2 = x2; mPrevX2 = x2;
mPrevY2 = y2; mPrevY2 = y2;
mMap.updateMap(true);
return true; return true;
} }

View File

@ -28,7 +28,6 @@ import org.oscim.core.MapPosition;
import org.oscim.core.MercatorProjection; import org.oscim.core.MercatorProjection;
import org.oscim.core.Tile; import org.oscim.core.Tile;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.renderer.BufferObject;
import org.oscim.renderer.ElementRenderer; import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.MapRenderer.Matrices; import org.oscim.renderer.MapRenderer.Matrices;
import org.oscim.renderer.elements.ElementLayers; import org.oscim.renderer.elements.ElementLayers;
@ -390,7 +389,6 @@ public class PathLayer extends Layer {
@Override @Override
public void cleanup(Task task) { public void cleanup(Task task) {
task.layer.vbo = BufferObject.release(task.layer.vbo);
task.layer.clear(); task.layer.clear();
} }

View File

@ -96,8 +96,9 @@ public abstract class Map {
} }
public VectorTileLayer setBaseMap(TileSource tileSource) { public VectorTileLayer setBaseMap(TileSource tileSource) {
mBaseLayer = new VectorTileLayer(this); // TODO cleanup previous baseLayer here?
mBaseLayer = new VectorTileLayer(this);
mBaseLayer.setTileSource(tileSource); mBaseLayer.setTileSource(tileSource);
mLayers.add(1, mBaseLayer); mLayers.add(1, mBaseLayer);
@ -145,7 +146,7 @@ public abstract class Map {
* be called from any thread. Request will be handled on main * be called from any thread. Request will be handled on main
* thread. * thread.
* *
* @param redraw pass true to render next frame * @param redraw pass true to render next frame afterwards
*/ */
public abstract void updateMap(boolean redraw); public abstract void updateMap(boolean redraw);

View File

@ -247,7 +247,8 @@ public class MapAnimator {
double dy = mVelocity.y * adv; double dy = mVelocity.y * adv;
if ((dx - mScroll.x) != 0 || (dy - mScroll.y) != 0) { if ((dx - mScroll.x) != 0 || (dy - mScroll.y) != 0) {
mViewport.moveMap((float) (dx - mScroll.x), (float) (dy - mScroll.y)); mViewport.moveMap((float) (dx - mScroll.x),
(float) (dy - mScroll.y));
mScroll.x = dx; mScroll.x = dx;
mScroll.y = dy; mScroll.y = dy;

View File

@ -477,8 +477,8 @@ public class Viewport {
double rsin = Math.sin(radians); double rsin = Math.sin(radians);
double rcos = Math.cos(radians); double rcos = Math.cos(radians);
float x = (float) (-pivotX * rcos - pivotY * -rsin + pivotX); float x = (float) (pivotX - pivotX * rcos + pivotY * rsin);
float y = (float) (-pivotX * rsin - pivotY * rcos + pivotY); float y = (float) (pivotY - pivotX * rsin - pivotY * rcos);
moveMap(x, y); moveMap(x, y);

View File

@ -31,7 +31,7 @@ import org.oscim.utils.quadtree.Node;
public class MapTile extends Tile { public class MapTile extends Tile {
/** /**
* * To be removed: used by GWT backend
* */ * */
public TileLoader loader; public TileLoader loader;
@ -128,10 +128,10 @@ public class MapTile extends Tile {
byte proxies; byte proxies;
/** counting the tiles that use this tile as proxy */ /** counting the tiles that use this tile as proxy */
byte refs; private byte refs;
/** up to 255 Threads may lock a tile */ /** up to 255 Threads may lock a tile */
byte locked; private byte locked;
// only used GLRenderer when this tile sits in for another tile. // only used GLRenderer when this tile sits in for another tile.
// e.g. x:-1,y:0,z:1 for x:1,y:0 // e.g. x:-1,y:0,z:1 for x:1,y:0

View File

@ -80,8 +80,6 @@ public class TileDecoder extends PbfDecoder {
throws IOException { throws IOException {
readUnsignedInt(is, buffer); readUnsignedInt(is, buffer);
//log.debug(tile + " contentLength:" + byteCount);
setInputStream(is); setInputStream(is);
mTile = tile; mTile = tile;
@ -115,7 +113,8 @@ public class TileDecoder extends PbfDecoder {
case TAG_TILE_TAG_KEYS: case TAG_TILE_TAG_KEYS:
if (keys == null || curKey >= numKeys) { if (keys == null || curKey >= numKeys) {
log.debug(mTile + " wrong number of keys " + numKeys); log.debug("{} wrong number of keys {}",
mTile, numKeys);
return false; return false;
} }
keys[curKey++] = decodeString(); keys[curKey++] = decodeString();
@ -123,7 +122,8 @@ public class TileDecoder extends PbfDecoder {
case TAG_TILE_TAG_VALUES: case TAG_TILE_TAG_VALUES:
if (values == null || curValue >= numValues) { if (values == null || curValue >= numValues) {
log.debug(mTile + " wrong number of values " + numValues); log.debug("{} wrong number of values {}",
mTile, numValues);
return false; return false;
} }
values[curValue++] = decodeString(); values[curValue++] = decodeString();
@ -153,7 +153,7 @@ public class TileDecoder extends PbfDecoder {
decodeVarintArray(len, mSArray); decodeVarintArray(len, mSArray);
if (!decodeTileTags(numTags, mSArray, keys, values)) { if (!decodeTileTags(numTags, mSArray, keys, values)) {
log.debug(mTile + " invalid tags"); log.debug("{} invalid tags", mTile);
return false; return false;
} }
break; break;
@ -161,13 +161,15 @@ public class TileDecoder extends PbfDecoder {
case TAG_TILE_VERSION: case TAG_TILE_VERSION:
version = decodeVarint32(); version = decodeVarint32();
if (version != 4) { if (version != 4) {
log.debug(mTile + " invalid version " + version); log.debug("{} invalid version:{}",
mTile, version);
return false; return false;
} }
break; break;
default: default:
log.debug(mTile + " invalid type for tile: " + tag); log.debug("{} invalid type for tile:{}",
mTile, tag);
return false; return false;
} }
} }
@ -175,9 +177,10 @@ public class TileDecoder extends PbfDecoder {
return true; return true;
} }
private boolean decodeTileTags(int numTags, short[] tagIdx, String[] keys, String[] vals) { private boolean decodeTileTags(int numTags, short[] tagIdx,
Tag tag; String[] keys, String[] vals) {
Tag tag;
for (int i = 0, n = (numTags << 1); i < n; i += 2) { for (int i = 0, n = (numTags << 1); i < n; i += 2) {
int k = tagIdx[i]; int k = tagIdx[i];
int v = tagIdx[i + 1]; int v = tagIdx[i + 1];
@ -291,15 +294,17 @@ public class TileDecoder extends PbfDecoder {
case TAG_ELEM_COORDS: case TAG_ELEM_COORDS:
if (coordCnt == 0) { if (coordCnt == 0) {
log.debug(mTile + " no coordinates"); log.debug("{} no coordinates", mTile);
} }
mElem.ensurePointSize(coordCnt, false); mElem.ensurePointSize(coordCnt, false);
int cnt = decodeInterleavedPoints(mElem.points, mScaleFactor); int cnt = decodeInterleavedPoints(mElem.points,
mScaleFactor);
if (cnt != coordCnt) { if (cnt != coordCnt) {
log.debug(mTile + " wrong number of coordintes " log.debug("{} wrong number of coordintes {}/{}", mTile,
+ coordCnt + "/" + cnt); Integer.valueOf(coordCnt),
Integer.valueOf(cnt));
fail = true; fail = true;
} }
break; break;
@ -309,15 +314,17 @@ public class TileDecoder extends PbfDecoder {
break; break;
default: default:
log.debug(mTile + " invalid type for way: " + tag); log.debug("{} invalid type for way: {}", mTile, tag);
} }
} }
if (fail || numTags == 0 || numIndices == 0) { if (fail || numTags == 0 || numIndices == 0) {
log.debug(mTile + " failed reading way: bytes:" + bytes + " index:" log.debug("{} failed: bytes:{} index:{} tags:{} ({},{})",
+ (Arrays.toString(index)) + " tag:" mTile, Integer.valueOf(bytes),
+ (mElem.tags.numTags > 0 ? Arrays.deepToString(mElem.tags.tags) : "null") Arrays.toString(index),
+ " " + numIndices + " " + coordCnt); mElem.tags,
Integer.valueOf(numIndices),
Integer.valueOf(coordCnt));
return false; return false;
} }
@ -353,7 +360,9 @@ public class TileDecoder extends PbfDecoder {
int idx = tagIds[i]; int idx = tagIds[i];
if (idx < 0 || idx > max) { if (idx < 0 || idx > max) {
log.debug("{} invalid tag:{}", mTile, idx + ' ' + i); log.debug("{} invalid tag:{}", mTile,
Integer.valueOf(idx),
Integer.valueOf(i));
return false; return false;
} }
mElem.tags.add(mTileTags.tags[idx]); mElem.tags.add(mTileTags.tags[idx]);