aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/src/cgeo/geocaching/CacheCache.java5
-rw-r--r--main/src/cgeo/geocaching/cgData.java71
-rw-r--r--main/src/cgeo/geocaching/cgeoapplication.java12
-rw-r--r--main/src/cgeo/geocaching/export/FieldnoteExport.java4
-rw-r--r--main/src/cgeo/geocaching/geopoint/Viewport.java47
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java157
6 files changed, 75 insertions, 221 deletions
diff --git a/main/src/cgeo/geocaching/CacheCache.java b/main/src/cgeo/geocaching/CacheCache.java
index 95b8b19..7f6f67e 100644
--- a/main/src/cgeo/geocaching/CacheCache.java
+++ b/main/src/cgeo/geocaching/CacheCache.java
@@ -85,7 +85,7 @@ public class CacheCache {
return cachesCache.get(geocode);
}
- public Set<String> getInViewport(final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon, final CacheType cacheType) {
+ public Set<String> getInViewport(final Viewport viewport, final CacheType cacheType) {
final Set<String> geocodes = new HashSet<String>();
for (final cgCache cache : cachesCache.values()) {
if (cache.getCoords() == null) {
@@ -94,8 +94,7 @@ public class CacheCache {
Log.e("CacheCache.getInViewport: got cache with null coordinates: " + cache.getGeocode());
continue;
}
- if ((CacheType.ALL == cacheType || cache.getType() == cacheType) &&
- Viewport.isCacheInViewPort(centerLat.intValue(), centerLon.intValue(), spanLat.intValue(), spanLon.intValue(), cache.getCoords())) {
+ if ((CacheType.ALL == cacheType || cache.getType() == cacheType) && viewport.contains(cache)) {
geocodes.add(cache.getGeocode());
}
}
diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java
index 857486c..604137a 100644
--- a/main/src/cgeo/geocaching/cgData.java
+++ b/main/src/cgeo/geocaching/cgData.java
@@ -1662,58 +1662,15 @@ public class cgData {
}
/**
- * Builds a where for coordinates
+ * Builds a where for a viewport with the size enhanced by 50%.
*
- * @param dbtable
- *
- * @param centerLat
- * @param centerLon
- * @param spanLat
- * @param spanLon
+ * @param dbTable
+ * @param viewport
* @return
*/
- private static StringBuilder buildCoordinateWhere(String dbtable, final Long centerLat, final Long centerLon, final Long spanLat, final Long spanLon) {
- StringBuilder where = new StringBuilder();
- double latMin = (centerLat / 1e6) - ((spanLat / 1e6) / 2) - ((spanLat / 1e6) / 4);
- double latMax = (centerLat / 1e6) + ((spanLat / 1e6) / 2) + ((spanLat / 1e6) / 4);
- double lonMin = (centerLon / 1e6) - ((spanLon / 1e6) / 2) - ((spanLon / 1e6) / 4);
- double lonMax = (centerLon / 1e6) + ((spanLon / 1e6) / 2) + ((spanLon / 1e6) / 4);
- double llCache;
-
- if (latMin > latMax) {
- llCache = latMax;
- latMax = latMin;
- latMin = llCache;
- }
- if (lonMin > lonMax) {
- llCache = lonMax;
- lonMax = lonMin;
- lonMin = llCache;
- }
-
- where.append("(");
- where.append(dbtable);
- where.append(".");
- where.append("latitude >= ");
- where.append(String.format((Locale) null, "%.6f", latMin));
- where.append(" and ");
- where.append(dbtable);
- where.append(".");
- where.append("latitude <= ");
- where.append(String.format((Locale) null, "%.6f", latMax));
- where.append(" and ");
- where.append(dbtable);
- where.append(".");
- where.append("longitude >= ");
- where.append(String.format((Locale) null, "%.6f", lonMin));
- where.append(" and ");
- where.append(dbtable);
- where.append(".");
- where.append("longitude <= ");
- where.append(String.format((Locale) null, "%.6f", lonMax));
- where.append(')');
- return where;
+ private static String buildCoordinateWhere(final String dbTable, final Viewport viewport) {
+ return viewport.resize(1.5).sqlWhere(dbTable);
}
/**
@@ -2432,13 +2389,13 @@ public class cgData {
}
/** Retrieve all stored caches from DB */
- public Set<String> loadCachedInViewport(final long centerLat, final long centerLon, final long spanLat, final long spanLon, final CacheType cacheType) {
- return loadInViewport(false, centerLat, centerLon, spanLat, spanLon, cacheType);
+ public Set<String> loadCachedInViewport(final Viewport viewport, final CacheType cacheType) {
+ return loadInViewport(false, viewport, cacheType);
}
/** Retrieve stored caches from DB with listId >= 1 */
- public Set<String> loadStoredInViewport(final long centerLat, final long centerLon, final long spanLat, final long spanLon, final CacheType cacheType) {
- return loadInViewport(true, centerLat, centerLon, spanLat, spanLon, cacheType);
+ public Set<String> loadStoredInViewport(final Viewport viewport, final CacheType cacheType) {
+ return loadInViewport(true, viewport, cacheType);
}
/**
@@ -2453,18 +2410,18 @@ public class cgData {
* @param cacheType
* @return Set with geocodes
*/
- private Set<String> loadInViewport(final boolean stored, final long centerLat, final long centerLon, final long spanLat, final long spanLon, final CacheType cacheType) {
+ private Set<String> loadInViewport(final boolean stored, final Viewport viewport, final CacheType cacheType) {
init();
final Set<String> geocodes = new HashSet<String>();
// if not stored only, get codes from CacheCache as well
if (!stored) {
- geocodes.addAll(CacheCache.getInstance().getInViewport(centerLat, centerLon, spanLat, spanLon, cacheType));
+ geocodes.addAll(CacheCache.getInstance().getInViewport(viewport, cacheType));
}
// viewport limitation
- StringBuilder where = buildCoordinateWhere(dbTableCaches, centerLat, centerLon, spanLat, spanLon);
+ final StringBuilder where = new StringBuilder(buildCoordinateWhere(dbTableCaches, viewport));
// cacheType limitation
if (cacheType != CacheType.ALL) {
@@ -3127,8 +3084,8 @@ public class cgData {
* @return
*/
- public Collection<? extends cgWaypoint> loadWaypoints(long centerLat, long centerLon, long spanLat, long spanLon, boolean excludeMine, boolean excludeDisabled) {
- StringBuilder where = buildCoordinateWhere(dbTableWaypoints, centerLat, centerLon, spanLat, spanLon);
+ public Collection<? extends cgWaypoint> loadWaypoints(final Viewport viewport, boolean excludeMine, boolean excludeDisabled) {
+ final StringBuilder where = new StringBuilder(buildCoordinateWhere(dbTableWaypoints, viewport));
if (excludeMine)
{
where.append("and " + dbTableCaches + ".own == 0 and " + dbTableCaches + ".found == 0 ");
diff --git a/main/src/cgeo/geocaching/cgeoapplication.java b/main/src/cgeo/geocaching/cgeoapplication.java
index 3d7f630..8b5eb57 100644
--- a/main/src/cgeo/geocaching/cgeoapplication.java
+++ b/main/src/cgeo/geocaching/cgeoapplication.java
@@ -307,14 +307,14 @@ public class cgeoapplication extends Application {
}
/** {@link cgData#loadCachedInViewport(long, long, long, long, CacheType)} */
- public SearchResult getCachedInViewport(final long centerLat, final long centerLon, final long spanLat, final long spanLon, final CacheType cacheType) {
- final Set<String> geocodes = storage.loadCachedInViewport(centerLat, centerLon, spanLat, spanLon, cacheType);
+ public SearchResult getCachedInViewport(final Viewport viewport, final CacheType cacheType) {
+ final Set<String> geocodes = storage.loadCachedInViewport(viewport, cacheType);
return new SearchResult(geocodes);
}
/** {@link cgData#loadStoredInViewport(long, long, long, long, CacheType)} */
- public SearchResult getStoredInViewport(final long centerLat, final long centerLon, final long spanLat, final long spanLon, final CacheType cacheType) {
- final Set<String> geocodes = storage.loadStoredInViewport(centerLat, centerLon, spanLat, spanLon, cacheType);
+ public SearchResult getStoredInViewport(final Viewport viewport, final CacheType cacheType) {
+ final Set<String> geocodes = storage.loadStoredInViewport(viewport, cacheType);
return new SearchResult(geocodes);
}
@@ -524,8 +524,8 @@ public class cgeoapplication extends Application {
storage.removeCaches(geocodes, removeFlags);
}
- public Collection<? extends cgWaypoint> getWaypointsInViewport(long centerLat, long centerLon, long spanLat, long spanLon, boolean excludeMine, boolean excludeDisabled) {
- return storage.loadWaypoints(centerLat, centerLon, spanLat, spanLon, excludeMine, excludeDisabled);
+ public Collection<? extends cgWaypoint> getWaypointsInViewport(final Viewport viewport, boolean excludeMine, boolean excludeDisabled) {
+ return storage.loadWaypoints(viewport, excludeMine, excludeDisabled);
}
}
diff --git a/main/src/cgeo/geocaching/export/FieldnoteExport.java b/main/src/cgeo/geocaching/export/FieldnoteExport.java
index 32c9943..05fb828 100644
--- a/main/src/cgeo/geocaching/export/FieldnoteExport.java
+++ b/main/src/cgeo/geocaching/export/FieldnoteExport.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.export;
+import cgeo.geocaching.LogEntry;
import cgeo.geocaching.R;
import cgeo.geocaching.cgCache;
-import cgeo.geocaching.LogEntry;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.activity.Progress;
@@ -89,7 +89,6 @@ class FieldnoteExport extends AbstractExport {
private class ExportTask extends AsyncTask<Void, Integer, Boolean> {
private final List<cgCache> caches;
private final Activity activity;
- private final boolean upload;
private final boolean onlyNew;
private final Progress progress = new Progress();
private File exportFile;
@@ -111,7 +110,6 @@ class FieldnoteExport extends AbstractExport {
public ExportTask(final List<cgCache> caches, final Activity activity, final boolean upload, final boolean onlyNew) {
this.caches = caches;
this.activity = activity;
- this.upload = upload;
this.onlyNew = onlyNew;
}
diff --git a/main/src/cgeo/geocaching/geopoint/Viewport.java b/main/src/cgeo/geocaching/geopoint/Viewport.java
index 4c810d6..67aed2c 100644
--- a/main/src/cgeo/geocaching/geopoint/Viewport.java
+++ b/main/src/cgeo/geocaching/geopoint/Viewport.java
@@ -98,53 +98,6 @@ public class Viewport {
}
/**
- * Check if coordinates are located in a viewport (defined by its center and span
- * in each direction).
- *
- * @param centerLat
- * the viewport center latitude
- * @param centerLon
- * the viewport center longitude
- * @param spanLat
- * the latitude span
- * @param spanLon
- * the longitude span
- * @param coords
- * the coordinates to check
- * @return true if the coordinates are in the viewport
- */
- // FIXME: this static method has nothing to do here and should be used with a viewport, not some int numbers,
- // when CGeoMap.java gets rewritten
- public static boolean isCacheInViewPort(int centerLat, int centerLon, int spanLat, int spanLon, final Geopoint coords) {
- final Viewport viewport = new Viewport(new Geopoint(centerLat / 1e6, centerLon / 1e6), spanLat / 1e6, spanLon / 1e6);
- return viewport.contains(coords);
- }
-
- /**
- * Check if an area is located in a viewport (defined by its center and span
- * in each direction).
- *
- * expects coordinates in E6 format
- *
- * @param centerLat1
- * @param centerLon1
- * @param centerLat2
- * @param centerLon2
- * @param spanLat1
- * @param spanLon1
- * @param spanLat2
- * @param spanLon2
- * @return
- */
- // FIXME: this static method has nothing to do here and should be used with a viewport, not some int numbers,
- // when CGeoMap.java gets rewritten
- public static boolean isInViewPort(int centerLat1, int centerLon1, int centerLat2, int centerLon2, int spanLat1, int spanLon1, int spanLat2, int spanLon2) {
- final Viewport outer = new Viewport(new Geopoint(centerLat1 / 1e6, centerLon1 / 1e6), spanLat1 / 1e6, spanLon1 / 1e6);
- final Viewport inner = new Viewport(new Geopoint(centerLat2 / 1e6, centerLon2 / 1e6), spanLat2 / 1e6, spanLon2 / 1e6);
- return outer.includes(inner);
- }
-
- /**
* Return the "where" part of the string appropriate for a SQL query.
*
* @param dbTable
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 934a597..7c70266 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -137,14 +137,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private boolean noMapTokenShowed = false;
// map status data
private boolean followMyLocation = false;
- private Integer centerLatitude = null;
- private Integer centerLongitude = null;
- private Integer spanLatitude = null;
- private Integer spanLongitude = null;
- private Integer centerLatitudeUsers = null;
- private Integer centerLongitudeUsers = null;
- private Integer spanLatitudeUsers = null;
- private Integer spanLongitudeUsers = null;
+ private Viewport viewport = null;
+ private Viewport viewportUsers = null;
private int zoom = -100;
// threads
private LoadTimer loadTimer = null;
@@ -342,15 +336,11 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
int count = 0;
if (protectedCaches.size() > 0) {
- final GeoPointImpl mapCenter = mapView.getMapViewCenter();
- final int mapCenterLat = mapCenter.getLatitudeE6();
- final int mapCenterLon = mapCenter.getLongitudeE6();
- final int mapSpanLat = mapView.getLatitudeSpan();
- final int mapSpanLon = mapView.getLongitudeSpan();
+ final Viewport viewport = mapView.getViewport();
- for (cgCache cache : protectedCaches) {
+ for (final cgCache cache : protectedCaches) {
if (cache != null && cache.getCoords() != null) {
- if (Viewport.isCacheInViewPort(mapCenterLat, mapCenterLon, mapSpanLat, mapSpanLon, cache.getCoords())) {
+ if (viewport.contains(cache)) {
count++;
}
}
@@ -531,12 +521,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
dirtyCaches.clear();
// Update display
- GeoPointImpl mapCenterNow = mapView.getMapViewCenter();
- int centerLatitudeNow = mapCenterNow.getLatitudeE6();
- int centerLongitudeNow = mapCenterNow.getLongitudeE6();
- int spanLatitudeNow = mapView.getLatitudeSpan();
- int spanLongitudeNow = mapView.getLongitudeSpan();
- displayExecutor.execute(new DisplayRunnable(centerLatitudeNow, centerLongitudeNow, spanLatitudeNow, spanLongitudeNow));
+ displayExecutor.execute(new DisplayRunnable(mapView.getViewport()));
}
startTimer();
@@ -724,15 +709,11 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
try {
if (cachesProtected.size() > 0) {
- final GeoPointImpl mapCenter = mapView.getMapViewCenter();
- final int mapCenterLat = mapCenter.getLatitudeE6();
- final int mapCenterLon = mapCenter.getLongitudeE6();
- final int mapSpanLat = mapView.getLatitudeSpan();
- final int mapSpanLon = mapView.getLongitudeSpan();
+ final Viewport viewport = mapView.getViewport();
- for (cgCache cache : cachesProtected) {
+ for (final cgCache cache : cachesProtected) {
if (cache != null && cache.getCoords() != null) {
- if (Viewport.isCacheInViewPort(mapCenterLat, mapCenterLon, mapSpanLat, mapSpanLon, cache.getCoords()) && !app.isOffline(cache.getGeocode(), null)) {
+ if (viewport.contains(cache) && !app.isOffline(cache.getGeocode(), null)) {
geocodes.add(cache.getGeocode());
}
}
@@ -1034,11 +1015,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (mapView != null) {
// get current viewport
- GeoPointImpl mapCenterNow = mapView.getMapViewCenter();
- int centerLatitudeNow = mapCenterNow.getLatitudeE6();
- int centerLongitudeNow = mapCenterNow.getLongitudeE6();
- int spanLatitudeNow = mapView.getLatitudeSpan();
- int spanLongitudeNow = mapView.getLongitudeSpan();
+ final Viewport viewportNow = mapView.getViewport();
int zoomNow = mapView.getMapZoomLevel();
// check if map moved or zoomed
@@ -1049,21 +1026,16 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
moved = true;
} else if (live && Settings.isLiveMap() && !downloaded) {
moved = true;
- } else if (centerLatitude == null || centerLongitude == null) {
- moved = true;
- } else if (spanLatitude == null || spanLongitude == null) {
+ } else if (viewport == null) {
moved = true;
} else if (zoomNow != zoom) {
moved = true;
- } else if (((Math.abs(spanLatitudeNow - spanLatitude) > 50) || (Math.abs(spanLongitudeNow - spanLongitude) > 50) || // changed zoom
- (Math.abs(centerLatitudeNow - centerLatitude) > (spanLatitudeNow / 4)) || (Math.abs(centerLongitudeNow - centerLongitude) > (spanLongitudeNow / 4)) // map moved
- ) && (cachesCnt <= 0 || CollectionUtils.isEmpty(caches)
- || !Viewport.isInViewPort(centerLatitude, centerLongitude, centerLatitudeNow, centerLongitudeNow, spanLatitude, spanLongitude, spanLatitudeNow, spanLongitudeNow))) {
+ } else if (mapMoved(viewport, viewportNow) && (cachesCnt <= 0 || CollectionUtils.isEmpty(caches) || !viewport.includes(viewportNow))) {
moved = true;
}
// update title on any change
- if (moved || zoomNow != zoom || spanLatitudeNow != spanLatitude || spanLongitudeNow != spanLongitude || centerLatitudeNow != centerLatitude || centerLongitudeNow != centerLongitude) {
+ if (moved || zoomNow != zoom || !viewportNow.equals(viewport)) {
displayHandler.sendEmptyMessage(UPDATE_TITLE);
}
zoom = zoomNow;
@@ -1075,12 +1047,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
long currentTime = System.currentTimeMillis();
if (1000 < (currentTime - loadThreadRun)) {
- centerLatitude = centerLatitudeNow;
- centerLongitude = centerLongitudeNow;
- spanLatitude = spanLatitudeNow;
- spanLongitude = spanLongitudeNow;
-
- loadExecutor.execute(new LoadRunnable(centerLatitude, centerLongitude, spanLatitude, spanLongitude));
+ viewport = viewportNow;
+ loadExecutor.execute(new LoadRunnable(viewport));
}
}
}
@@ -1124,11 +1092,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (mapView != null) {
// get current viewport
- GeoPointImpl mapCenterNow = mapView.getMapViewCenter();
- int centerLatitudeNow = mapCenterNow.getLatitudeE6();
- int centerLongitudeNow = mapCenterNow.getLongitudeE6();
- int spanLatitudeNow = mapView.getLatitudeSpan();
- int spanLongitudeNow = mapView.getLongitudeSpan();
+ final Viewport viewportNow = mapView.getViewport();
// check if map moved or zoomed
boolean moved = false;
@@ -1137,24 +1101,16 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (60000 < (currentTime - go4CacheThreadRun)) {
moved = true;
- } else if (centerLatitudeUsers == null || centerLongitudeUsers == null) {
- moved = true;
- } else if (spanLatitudeUsers == null || spanLongitudeUsers == null) {
+ } else if (viewportUsers == null) {
moved = true;
- } else if (((Math.abs(spanLatitudeNow - spanLatitudeUsers) > 50) || (Math.abs(spanLongitudeNow - spanLongitudeUsers) > 50) || // changed zoom
- (Math.abs(centerLatitudeNow - centerLatitudeUsers) > (spanLatitudeNow / 4)) || (Math.abs(centerLongitudeNow - centerLongitudeUsers) > (spanLongitudeNow / 4)) // map moved
- ) && !Viewport.isInViewPort(centerLatitudeUsers, centerLongitudeUsers, centerLatitudeNow, centerLongitudeNow, spanLatitudeUsers, spanLongitudeUsers, spanLatitudeNow, spanLongitudeNow)) {
+ } else if (mapMoved(viewportUsers, viewportNow) && !viewportUsers.includes(viewportNow)) {
moved = true;
}
// save new values
if (moved && (1000 < (currentTime - go4CacheThreadRun))) {
- centerLatitudeUsers = centerLatitudeNow;
- centerLongitudeUsers = centerLongitudeNow;
- spanLatitudeUsers = spanLatitudeNow;
- spanLongitudeUsers = spanLongitudeNow;
-
- Go4CacheExecutor.execute(new Go4CacheRunnable(centerLatitudeNow, centerLongitudeNow, spanLatitudeNow, spanLongitudeNow));
+ viewportUsers = viewportNow;
+ Go4CacheExecutor.execute(new Go4CacheRunnable(viewportUsers));
}
}
@@ -1173,8 +1129,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private class LoadRunnable extends DoRunnable {
- public LoadRunnable(long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) {
- super(centerLatIn, centerLonIn, spanLatIn, spanLonIn);
+ public LoadRunnable(final Viewport viewport) {
+ super(viewport);
}
@Override
@@ -1193,9 +1149,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
} else {
// live map
if (!live || !Settings.isLiveMap()) {
- search = new SearchResult(app.getStoredInViewport(centerLat, centerLon, spanLat, spanLon, Settings.getCacheType()));
+ search = new SearchResult(app.getStoredInViewport(viewport, Settings.getCacheType()));
} else {
- search = new SearchResult(app.getCachedInViewport(centerLat, centerLon, spanLat, spanLon, Settings.getCacheType()));
+ search = new SearchResult(app.getCachedInViewport(viewport, Settings.getCacheType()));
}
}
@@ -1221,13 +1177,10 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (cachesCnt < Settings.getWayPointsThreshold())
{
waypoints.clear();
- if (searchIntent == null && geocodeIntent == null)
- {
+ if (searchIntent == null && geocodeIntent == null) {
//All visible waypoints
- waypoints.addAll(app.getWaypointsInViewport(centerLat, centerLon, spanLat, spanLon, Settings.isExcludeMyCaches(), Settings.isExcludeDisabledCaches()));
- }
- else
- {
+ waypoints.addAll(app.getWaypointsInViewport(viewport, Settings.isExcludeMyCaches(), Settings.isExcludeDisabledCaches()));
+ } else {
//All waypoints from the viewed caches
for (cgCache c : caches.getAsList()) {
waypoints.addAll(c.getWaypoints());
@@ -1236,10 +1189,10 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
//render
- displayExecutor.execute(new DisplayRunnable(centerLat, centerLon, spanLat, spanLon));
+ displayExecutor.execute(new DisplayRunnable(viewport));
if (live && Settings.isLiveMap()) {
- downloadExecutor.execute(new DownloadRunnable(centerLat, centerLon, spanLat, spanLon));
+ downloadExecutor.execute(new DownloadRunnable(viewport));
}
} finally {
showProgressHandler.sendEmptyMessage(HIDE_PROGRESS); // hide progress
@@ -1254,8 +1207,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private class DownloadRunnable extends DoRunnable {
- public DownloadRunnable(long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) {
- super(centerLatIn, centerLonIn, spanLatIn, spanLonIn);
+ public DownloadRunnable(final Viewport viewport) {
+ super(viewport);
}
@Override
@@ -1273,8 +1226,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
}
- final Viewport viewport = new Viewport(new Geopoint(centerLat / 1e6, centerLon / 1e6), 0.8 * spanLat / 1e6, 0.8 * spanLon / 1e6);
- search = ConnectorFactory.searchByViewport(viewport, tokens);
+ search = ConnectorFactory.searchByViewport(viewport.resize(0.8), tokens);
if (search != null) {
downloaded = true;
if (search.getError() == StatusCode.NOT_LOGGED_IN) {
@@ -1296,7 +1248,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
//render
- displayExecutor.execute(new DisplayRunnable(centerLat, centerLon, spanLat, spanLon));
+ displayExecutor.execute(new DisplayRunnable(viewport));
} catch (ThreadDeath e) {
Log.d("DownloadThread stopped");
@@ -1312,8 +1264,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
*/
private class DisplayRunnable extends DoRunnable {
- public DisplayRunnable(long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) {
- super(centerLatIn, centerLonIn, spanLatIn, spanLonIn);
+ public DisplayRunnable(final Viewport viewport) {
+ super(viewport);
}
@Override
@@ -1376,21 +1328,15 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private class Go4CacheRunnable extends DoRunnable {
- public Go4CacheRunnable(long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) {
- super(centerLatIn, centerLonIn, spanLatIn, spanLonIn);
+ public Go4CacheRunnable(final Viewport viewport) {
+ super(viewport);
}
@Override
public void run() {
- final Geopoint center = new Geopoint(centerLat / 1e6, centerLon / 1e6);
- final Viewport viewport = new Viewport(center, spanLat / 1e6, spanLon / 1e6).resize(1.5);
-
- try {
- go4CacheThreadRun = System.currentTimeMillis();
- List<Go4CacheUser> go4CacheUsers = Go4Cache.getGeocachersInViewport(Settings.getUsername(), viewport);
- go4CacheDisplayExecutor.execute(new Go4CacheDisplayRunnable(go4CacheUsers, centerLat, centerLon, spanLat, spanLon));
- } finally {
- }
+ go4CacheThreadRun = System.currentTimeMillis();
+ List<Go4CacheUser> go4CacheUsers = Go4Cache.getGeocachersInViewport(Settings.getUsername(), viewport.resize(1.5));
+ go4CacheDisplayExecutor.execute(new Go4CacheDisplayRunnable(go4CacheUsers, viewport));
}
}
@@ -1401,8 +1347,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private List<Go4CacheUser> users = null;
- public Go4CacheDisplayRunnable(List<Go4CacheUser> usersIn, long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) {
- super(centerLatIn, centerLonIn, spanLatIn, spanLonIn);
+ public Go4CacheDisplayRunnable(List<Go4CacheUser> usersIn, final Viewport viewport) {
+ super(viewport);
users = usersIn;
}
@@ -1470,16 +1416,10 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
private abstract class DoRunnable implements Runnable {
- protected long centerLat = 0L;
- protected long centerLon = 0L;
- protected long spanLat = 0L;
- protected long spanLon = 0L;
+ final protected Viewport viewport;
- public DoRunnable(long centerLatIn, long centerLonIn, long spanLatIn, long spanLonIn) {
- centerLat = centerLatIn;
- centerLon = centerLonIn;
- spanLat = spanLatIn;
- spanLon = spanLonIn;
+ public DoRunnable(final Viewport viewport) {
+ this.viewport = viewport;
}
public abstract void run();
@@ -1577,6 +1517,13 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
}
}
+ private static boolean mapMoved(final Viewport referenceViewport, final Viewport newViewport) {
+ return Math.abs(newViewport.getLatitudeSpan() - referenceViewport.getLatitudeSpan()) > 50e-6 ||
+ Math.abs(newViewport.getLongitudeSpan() - referenceViewport.getLongitudeSpan()) > 50e-6 ||
+ Math.abs(newViewport.center.getLatitude() - referenceViewport.center.getLatitude()) > referenceViewport.getLatitudeSpan() / 4 ||
+ Math.abs(newViewport.center.getLongitude() - referenceViewport.center.getLongitude()) > referenceViewport.getLongitudeSpan() / 4;
+ }
+
// center map to desired location
private void centerMap(final Geopoint coords) {
if (coords == null) {