aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorcampbeb <bpcampbell@gmail.com>2012-05-22 14:14:08 -1000
committercampbeb <bpcampbell@gmail.com>2012-05-22 14:14:08 -1000
commit3c23e89952eb834fcb71fc6d869ecd3b7eb4d87c (patch)
tree309d814222463f1e6431ec2262ef949384ff56ce /main/src
parent4453f08ccda762f1c608feaf6cf379d1ffa93df4 (diff)
downloadcgeo-3c23e89952eb834fcb71fc6d869ecd3b7eb4d87c.zip
cgeo-3c23e89952eb834fcb71fc6d869ecd3b7eb4d87c.tar.gz
cgeo-3c23e89952eb834fcb71fc6d869ecd3b7eb4d87c.tar.bz2
Fix offline zoom issue and document zoom level differences
Google Maps and OSM Maps use different zoom levels for the same view ranges. This is better documented. Additionally, this change fixes zooming out causing zoom in (Issue #1485).
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java4
-rw-r--r--main/src/cgeo/geocaching/maps/google/GoogleMapView.java2
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapController.java12
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java20
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapController.java12
-rw-r--r--main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java20
6 files changed, 56 insertions, 14 deletions
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 25bc80c..30d4242 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -916,7 +916,9 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto
if (mapView != null) {
// get current viewport
final Viewport viewportNow = mapView.getViewport();
- int zoomNow = mapView.getMapZoomLevel();
+ // Since zoomNow is used only for local comparison purposes,
+ // it is ok to use the Google Maps compatible zoom level of OSM Maps
+ final int zoomNow = mapView.getMapZoomLevel();
// check if map moved or zoomed
//TODO Portree Use Rectangle inside with bigger search window. That will stop reloading on every move
diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapView.java b/main/src/cgeo/geocaching/maps/google/GoogleMapView.java
index 55a6167..c575177 100644
--- a/main/src/cgeo/geocaching/maps/google/GoogleMapView.java
+++ b/main/src/cgeo/geocaching/maps/google/GoogleMapView.java
@@ -56,7 +56,7 @@ public class GoogleMapView extends MapView implements MapViewImpl {
@Override
public void draw(Canvas canvas) {
try {
- if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
+ if (getMapZoomLevel() > 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
getController().setZoom(22);
}
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapController.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapController.java
index db81609..5aaecc8 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapController.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapController.java
@@ -26,13 +26,15 @@ public class MapsforgeMapController implements MapControllerImpl {
mapController.setCenter((GeoPoint) geoPoint);
}
+ /**
+ * Set the map zoom level to mapzoom-1 or maxZoomLevel, whichever is least
+ * mapzoom-1 is used to be compatible with Google Maps zoom levels
+ */
@Override
public void setZoom(int mapzoom) {
- int mfzoom = mapzoom - 1;
- if (mfzoom > maxZoomLevel) {
- mfzoom = maxZoomLevel;
- }
- mapController.setZoom(mfzoom);
+ // Google Maps and OSM Maps use different zoom levels for the same view.
+ // All OSM Maps zoom levels are offset by 1 so they match Google Maps.
+ mapController.setZoom(Math.min(mapzoom - 1, maxZoomLevel));
}
@Override
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
index 1649510..08b9c0f 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java
@@ -51,7 +51,9 @@ public class MapsforgeMapView extends MapView implements MapViewImpl {
@Override
public void draw(Canvas canvas) {
try {
- if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
+ // Google Maps and OSM Maps use different zoom levels for the same view.
+ // Here we don't want the Google Maps compatible zoom level, but the actual one.
+ if (getActualMapZoomLevel() > 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
getController().setZoom(22);
}
@@ -170,11 +172,27 @@ public class MapsforgeMapView extends MapView implements MapViewImpl {
// Nothing to do here
}
+ /**
+ * Get the map zoom level which is compatible with Google Maps.
+ *
+ * @return the current map zoom level +1
+ */
@Override
public int getMapZoomLevel() {
+ // Google Maps and OSM Maps use different zoom levels for the same view.
+ // All OSM Maps zoom levels are offset by 1 so they match Google Maps.
return getMapPosition().getZoomLevel() + 1;
}
+ /**
+ * Get the actual map zoom level
+ *
+ * @return the current map zoom level with no adjustments
+ */
+ private int getActualMapZoomLevel() {
+ return getMapPosition().getZoomLevel();
+ }
+
@Override
public void setMapSource() {
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapController.java b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapController.java
index 2160d21..573f65e 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapController.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapController.java
@@ -26,13 +26,15 @@ public class MapsforgeMapController implements MapControllerImpl {
mapController.setCenter((GeoPoint) geoPoint);
}
+ /**
+ * Set the map zoom level to mapzoom-1 or maxZoomLevel, whichever is least
+ * mapzoom-1 is used to be compatible with Google Maps zoom levels
+ */
@Override
public void setZoom(int mapzoom) {
- int mfzoom = mapzoom - 1;
- if (mfzoom > maxZoomLevel) {
- mfzoom = maxZoomLevel;
- }
- mapController.setZoom(mfzoom);
+ // Google Maps and OSM Maps use different zoom levels for the same view.
+ // All OSM Maps zoom levels are offset by 1 so they match Google Maps.
+ mapController.setZoom(Math.min(mapzoom - 1, maxZoomLevel));
}
@Override
diff --git a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java
index 14eda37..e53d976 100644
--- a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java
+++ b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapView024.java
@@ -46,7 +46,9 @@ public class MapsforgeMapView024 extends MapView implements MapViewImpl {
@Override
public void draw(Canvas canvas) {
try {
- if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
+ // Google Maps and OSM Maps use different zoom levels for the same view.
+ // Here we don't want the Google Maps compatible zoom level, but the actual one.
+ if (getActualMapZoomLevel() > 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
getController().setZoom(22);
}
@@ -165,11 +167,27 @@ public class MapsforgeMapView024 extends MapView implements MapViewImpl {
// Nothing to do here
}
+ /**
+ * Get the map zoom level which is compatible with Google Maps.
+ *
+ * @return the current map zoom level +1
+ */
@Override
public int getMapZoomLevel() {
+ // Google Maps and OSM Maps use different zoom levels for the same view.
+ // All OSM Maps zoom levels are offset by 1 so they match Google Maps.
return getZoomLevel() + 1;
}
+ /**
+ * Get the actual map zoom level
+ *
+ * @return the current map zoom level with no adjustments
+ */
+ private int getActualMapZoomLevel() {
+ return getZoomLevel();
+ }
+
@Override
public void setMapSource() {
setMapViewMode(MapViewMode.CANVAS_RENDERER);