diff options
| -rw-r--r-- | main/src/cgeo/geocaching/maps/CGeoMap.java | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 6b0904c..57bc4bd 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -1311,8 +1311,8 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto @Override public void run() { - final Geopoint center = new Geopoint((int) centerLat, (int) centerLon); - final Viewport viewport = new Viewport(center, spanLat / 1e6 * 1.5, spanLon / 1e6 * 1.5); + 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(); @@ -1524,6 +1524,10 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto } } + private Viewport listToViewport(final List<Number> l) { + return new Viewport(new Geopoint(l.get(1).doubleValue(), l.get(3).doubleValue()), new Geopoint(l.get(2).doubleValue(), l.get(4).doubleValue())); + } + // move map to view results of searchIntent private void centerMap(String geocodeCenter, final SearchResult searchCenter, final Geopoint coordsCenter, int[] mapState) { @@ -1539,46 +1543,30 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto alreadyCentered = true; } else if (!centered && (geocodeCenter != null || searchIntent != null)) { try { - List<Number> viewport = null; + List<Number> vp = null; if (geocodeCenter != null) { - viewport = app.getBounds(geocodeCenter); + vp = app.getBounds(geocodeCenter); } else { if (searchCenter != null) { - viewport = app.getBounds(searchCenter.getGeocodes()); + vp = app.getBounds(searchCenter.getGeocodes()); } } - if (viewport == null || viewport.size() < 5) { + if (vp == null || vp.size() < 5) { return; } - int cnt = (Integer) viewport.get(0); + int cnt = (Integer) vp.get(0); if (cnt <= 0) { return; } - int minLat = (int) ((Double) viewport.get(1) * 1e6); - int maxLat = (int) ((Double) viewport.get(2) * 1e6); - int maxLon = (int) ((Double) viewport.get(3) * 1e6); - int minLon = (int) ((Double) viewport.get(4) * 1e6); - int centerLat = 0; - int centerLon = 0; - - if ((Math.abs(maxLat) - Math.abs(minLat)) != 0) { - centerLat = minLat + ((maxLat - minLat) / 2); - } else { - centerLat = maxLat; - } - if ((Math.abs(maxLon) - Math.abs(minLon)) != 0) { - centerLon = minLon + ((maxLon - minLon) / 2); - } else { - centerLon = maxLon; - } + final Viewport viewport = listToViewport(vp); - mapController.setCenter(mapProvider.getGeoPointBase(new Geopoint(centerLat, centerLon))); - if (Math.abs(maxLat - minLat) != 0 && Math.abs(maxLon - minLon) != 0) { - mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon)); + mapController.setCenter(mapProvider.getGeoPointBase(viewport.center)); + if (viewport.getLatitudeSpan() != 0 && viewport.getLongitudeSpan() != 0) { + mapController.zoomToSpan((int) (viewport.getLatitudeSpan() * 1e6), (int) (viewport.getLongitudeSpan() * 1e6)); } } catch (Exception e) { // nothing at all |
