aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
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);