diff options
author | kevin <kevin.li@mapbox.com> | 2019-06-21 16:04:24 +0800 |
---|---|---|
committer | kevin <kevin.li@mapbox.com> | 2019-06-26 15:16:49 +0800 |
commit | 45ec7709f36ab7ffed4260f9b3e2f0b8bab42c93 (patch) | |
tree | f9e7f7b81f17b359973f8cca5d6e81f1b70f20d5 | |
parent | 3b0e5a59a288b165e7fac26c22ff51ee524e1568 (diff) | |
download | qtlocation-mapboxgl-45ec7709f36ab7ffed4260f9b3e2f0b8bab42c93.tar.gz |
Add shift for location of camera.
3 files changed, 74 insertions, 5 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java index 6337287770..c48dfc5e0a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java @@ -9,6 +9,7 @@ import android.support.annotation.VisibleForTesting; import android.util.SparseArray; import android.view.animation.LinearInterpolator; +import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.log.Logger; @@ -90,7 +91,10 @@ final class LocationAnimatorCoordinator { targetCameraBearing = checkGpsNorth(isGpsNorth, targetCameraBearing); updateLayerAnimators(previousLayerLatLng, targetLatLng, previousLayerBearing, targetLayerBearing); - updateCameraAnimators(previousCameraLatLng, previousCameraBearing, targetLatLng, targetCameraBearing); + + Point p = Point.fromLngLat(targetLatLng.getLongitude(), targetLatLng.getLatitude()); + updateCameraAnimators(previousCameraLatLng, previousCameraBearing, new LatLng(p.latitude(),p.longitude()), + targetCameraBearing); boolean snap = immediateAnimation(projection, previousCameraLatLng, targetLatLng) || immediateAnimation(projection, previousLayerLatLng, targetLatLng); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt index 6a01d14249..6544a01a07 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt @@ -13,18 +13,21 @@ import com.mapbox.android.core.location.LocationEngineCallback import com.mapbox.android.core.location.LocationEngineResult import com.mapbox.android.core.permissions.PermissionsListener import com.mapbox.android.core.permissions.PermissionsManager -import com.mapbox.mapboxsdk.camera.CameraUpdateFactory -import com.mapbox.mapboxsdk.geometry.LatLng +import com.mapbox.geojson.Point +import com.mapbox.geojson.shifter.CoordinateShifter +import com.mapbox.geojson.shifter.CoordinateShifterManager import com.mapbox.mapboxsdk.location.LocationComponentActivationOptions +import com.mapbox.mapboxsdk.location.modes.CameraMode.TRACKING import com.mapbox.mapboxsdk.maps.MapView import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.Style import com.mapbox.mapboxsdk.testapp.R import kotlinx.android.synthetic.main.activity_location_layer_fragment.* +import java.util.ArrayList class LocationFragmentActivity : AppCompatActivity() { private lateinit var permissionsManager: PermissionsManager - + private var shift = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_location_layer_fragment) @@ -41,6 +44,18 @@ class LocationFragmentActivity : AppCompatActivity() { this.onBackPressed() } } + + shifter.setOnClickListener{ + if(!shift) { + Toast.makeText(this, "Shifter is on.",Toast.LENGTH_LONG).show() + CoordinateShifterManager.setCoordinateShifter(coordinateShifter()) + }else{ + Toast.makeText(this, "Shifter is off.",Toast.LENGTH_LONG).show() + CoordinateShifterManager.setCoordinateShifter(null) + } + shift = !shift + } + supportActionBar?.setDisplayHomeAsUpEnabled(true) if (PermissionsManager.areLocationPermissionsGranted(this)) { @@ -74,6 +89,41 @@ class LocationFragmentActivity : AppCompatActivity() { } } + private fun coordinateShifter(): CoordinateShifter { + return object : CoordinateShifter { + override fun shiftLonLat(lon: Double, lat: Double): List<Double> { + return shift(lon, lat) + } + + override fun shiftLonLatAlt(lon: Double, lat: Double, altitude: Double): List<Double> { + val shiftedLongLat = shift(lon, lat) + shiftedLongLat.add(altitude) + return shiftedLongLat + } + + override fun unshiftPoint(shiftedPoint: Point): List<Double> { + val shiftedCoordinates = ArrayList<Double>(2) + shiftedCoordinates.add(shiftedPoint.longitude()) + shiftedCoordinates.add(shiftedPoint.latitude()) + return shiftedCoordinates + } + + override fun unshiftPoint(shiftedCoordinates: List<Double>): List<Double> { + // Left empty on purpose + return shiftedCoordinates + } + + private fun shift(lon: Double, lat: Double): MutableList<Double> { + val shiftedCoordinates = ArrayList<Double>(3) + val shiftedLon = lon + 0.5 + val shiftedLat = lat + 0.5 + shiftedCoordinates.add(shiftedLon) + shiftedCoordinates.add(shiftedLat) + return shiftedCoordinates + } + } + } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults) @@ -100,6 +150,7 @@ class LocationFragmentActivity : AppCompatActivity() { mapView.onCreate(savedInstanceState) mapView.getMapAsync { mapboxMap = it + mapboxMap.setMinZoomPreference(12.0) it.setStyle(Style.MAPBOX_STREETS) { style -> val component = mapboxMap.locationComponent @@ -110,12 +161,13 @@ class LocationFragmentActivity : AppCompatActivity() { component.isLocationComponentEnabled = true component.locationEngine?.getLastLocation(this) + component.cameraMode = TRACKING } } } override fun onSuccess(result: LocationEngineResult?) { - mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) +// mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) } override fun onFailure(exception: Exception) { @@ -155,6 +207,7 @@ class LocationFragmentActivity : AppCompatActivity() { override fun onDestroyView() { super.onDestroyView() mapView.onDestroy() + CoordinateShifterManager.setCoordinateShifter(null) } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml index 3c1436a1a8..efd1e6ebe8 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml @@ -10,6 +10,18 @@ android:layout_height="match_parent"/> <android.support.design.widget.FloatingActionButton + android:id="@+id/shifter" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom|end" + android:layout_margin="@dimen/fab_margin" + android:tint="@android:color/white" + app:backgroundTint="@color/accent" + app:layout_constraintBottom_toTopOf="@+id/fab" + app:layout_constraintRight_toRightOf="parent" + app:srcCompat="@drawable/ic_add" /> + + <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" |