From 077ab87b4e0dd53ec6bb515d0006a44142cf7187 Mon Sep 17 00:00:00 2001 From: lorntao Date: Fri, 20 Jan 2017 13:43:43 +0800 Subject: fix for the china Publish ID --- .../maps/widgets/scaleview/MapScaleModel.java | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/scaleview/MapScaleModel.java (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/scaleview/MapScaleModel.java') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/scaleview/MapScaleModel.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/scaleview/MapScaleModel.java new file mode 100644 index 0000000000..2245d1d40a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/scaleview/MapScaleModel.java @@ -0,0 +1,57 @@ +package com.mapbox.mapboxsdk.maps.widgets.scaleview; + +import android.graphics.PointF; + +import com.mapbox.mapboxsdk.camera.CameraPosition; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.Projection; + + +class MapScaleModel { + + private final int[] meters = { + 150,350,700, 1500, 2500, 5000, 10000, 20000, 40000, 100000, 150000, 350000, 700000, 1500000, 2500000}; + + private final LatLng src = new LatLng(31, 121); + + private int maxWidth; + + private double zoom = -1; + private Scale scale; + + MapScaleModel() { + } + + void setMaxWidth(int width) { + maxWidth = width; + } + + Scale setProjection(Projection projection, CameraPosition cameraPosition) { + if (zoom == cameraPosition.zoom) return scale; + + int distance = 0; + int distanceIndex = meters.length; + double screenDistance = maxWidth + 1; + + while (screenDistance > maxWidth && distanceIndex > 0) { + distance = meters[--distanceIndex]; + + LatLng dest = DistanceUtils.translatePoint(src, distance, 120); + + PointF pointSrc = projection.toScreenLocation(src); + PointF pointDest = projection.toScreenLocation(dest); + + screenDistance = Math.sqrt(Math.pow(pointSrc.x - pointDest.x, 2) + Math.pow(pointSrc.y - pointDest.y, 2)); + } + + zoom = cameraPosition.zoom; + scale = new Scale(text(distance), (float) screenDistance); + + return scale; + } + + private String text(int distance) { + if (distance < 1000) return distance + " m"; + else return distance / 1000 + " km"; + } +} -- cgit v1.2.1