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

View File

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

View File

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

View File

@ -247,7 +247,8 @@ public class MapAnimator {
double dy = mVelocity.y * adv;
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.y = dy;

View File

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

View File

@ -31,7 +31,7 @@ import org.oscim.utils.quadtree.Node;
public class MapTile extends Tile {
/**
*
* To be removed: used by GWT backend
* */
public TileLoader loader;
@ -128,10 +128,10 @@ public class MapTile extends Tile {
byte proxies;
/** counting the tiles that use this tile as proxy */
byte refs;
private byte refs;
/** up to 255 Threads may lock a tile */
byte locked;
private byte locked;
// only used GLRenderer when this tile sits in for another tile.
// 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 {
readUnsignedInt(is, buffer);
//log.debug(tile + " contentLength:" + byteCount);
setInputStream(is);
mTile = tile;
@ -115,7 +113,8 @@ public class TileDecoder extends PbfDecoder {
case TAG_TILE_TAG_KEYS:
if (keys == null || curKey >= numKeys) {
log.debug(mTile + " wrong number of keys " + numKeys);
log.debug("{} wrong number of keys {}",
mTile, numKeys);
return false;
}
keys[curKey++] = decodeString();
@ -123,7 +122,8 @@ public class TileDecoder extends PbfDecoder {
case TAG_TILE_TAG_VALUES:
if (values == null || curValue >= numValues) {
log.debug(mTile + " wrong number of values " + numValues);
log.debug("{} wrong number of values {}",
mTile, numValues);
return false;
}
values[curValue++] = decodeString();
@ -153,7 +153,7 @@ public class TileDecoder extends PbfDecoder {
decodeVarintArray(len, mSArray);
if (!decodeTileTags(numTags, mSArray, keys, values)) {
log.debug(mTile + " invalid tags");
log.debug("{} invalid tags", mTile);
return false;
}
break;
@ -161,13 +161,15 @@ public class TileDecoder extends PbfDecoder {
case TAG_TILE_VERSION:
version = decodeVarint32();
if (version != 4) {
log.debug(mTile + " invalid version " + version);
log.debug("{} invalid version:{}",
mTile, version);
return false;
}
break;
default:
log.debug(mTile + " invalid type for tile: " + tag);
log.debug("{} invalid type for tile:{}",
mTile, tag);
return false;
}
}
@ -175,9 +177,10 @@ public class TileDecoder extends PbfDecoder {
return true;
}
private boolean decodeTileTags(int numTags, short[] tagIdx, String[] keys, String[] vals) {
Tag tag;
private boolean decodeTileTags(int numTags, short[] tagIdx,
String[] keys, String[] vals) {
Tag tag;
for (int i = 0, n = (numTags << 1); i < n; i += 2) {
int k = tagIdx[i];
int v = tagIdx[i + 1];
@ -291,15 +294,17 @@ public class TileDecoder extends PbfDecoder {
case TAG_ELEM_COORDS:
if (coordCnt == 0) {
log.debug(mTile + " no coordinates");
log.debug("{} no coordinates", mTile);
}
mElem.ensurePointSize(coordCnt, false);
int cnt = decodeInterleavedPoints(mElem.points, mScaleFactor);
int cnt = decodeInterleavedPoints(mElem.points,
mScaleFactor);
if (cnt != coordCnt) {
log.debug(mTile + " wrong number of coordintes "
+ coordCnt + "/" + cnt);
log.debug("{} wrong number of coordintes {}/{}", mTile,
Integer.valueOf(coordCnt),
Integer.valueOf(cnt));
fail = true;
}
break;
@ -309,15 +314,17 @@ public class TileDecoder extends PbfDecoder {
break;
default:
log.debug(mTile + " invalid type for way: " + tag);
log.debug("{} invalid type for way: {}", mTile, tag);
}
}
if (fail || numTags == 0 || numIndices == 0) {
log.debug(mTile + " failed reading way: bytes:" + bytes + " index:"
+ (Arrays.toString(index)) + " tag:"
+ (mElem.tags.numTags > 0 ? Arrays.deepToString(mElem.tags.tags) : "null")
+ " " + numIndices + " " + coordCnt);
log.debug("{} failed: bytes:{} index:{} tags:{} ({},{})",
mTile, Integer.valueOf(bytes),
Arrays.toString(index),
mElem.tags,
Integer.valueOf(numIndices),
Integer.valueOf(coordCnt));
return false;
}
@ -353,7 +360,9 @@ public class TileDecoder extends PbfDecoder {
int idx = tagIds[i];
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;
}
mElem.tags.add(mTileTags.tags[idx]);