[android] - create smallest possible LatLngBounds when visible region crosses the dateline

This commit is contained in:
Tobrun
2017-08-10 15:07:48 +02:00
committed by Tobrun
parent fb05d2e16a
commit 830bf151be
3 changed files with 37 additions and 8 deletions

View File

@@ -221,6 +221,16 @@ public class LatLngBounds implements Parcelable {
return new LatLng[] {getNorthEast(), getSouthWest()};
}
/**
* Constructs a LatLngBounds from doubles representing a LatLng pair.
* <p>
* This method doesn't recalculate most east or most west boundaries.
* </p>
*/
public static LatLngBounds from(double latNorth, double lonEast, double latSouth, double lonWest) {
return new LatLngBounds(latNorth, lonEast, latSouth, lonWest);
}
/**
* Constructs a LatLngBounds from current bounds with an additional latitude-longitude pair.
*

View File

@@ -93,8 +93,6 @@ public class Projection {
* @return The projection of the viewing frustum in its current state.
*/
public VisibleRegion getVisibleRegion() {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
float left = 0;
float right = nativeMapView.getWidth();
float top = 0;
@@ -105,12 +103,13 @@ public class Projection {
LatLng bottomRight = fromScreenLocation(new PointF(right, bottom));
LatLng bottomLeft = fromScreenLocation(new PointF(left, bottom));
builder.include(topLeft)
.include(topRight)
.include(bottomRight)
.include(bottomLeft);
return new VisibleRegion(topLeft, topRight, bottomLeft, bottomRight, builder.build());
return new VisibleRegion(topLeft, topRight, bottomLeft, bottomRight,
LatLngBounds.from(
topRight.getLatitude(),
topRight.getLongitude(),
bottomLeft.getLatitude(),
bottomLeft.getLongitude())
);
}
/**

View File

@@ -1,11 +1,18 @@
package com.mapbox.mapboxsdk.testapp.activity.maplayout;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.maps.Projection;
import com.mapbox.mapboxsdk.testapp.R;
import timber.log.Timber;
/**
* Test activity showcasing a simple MapView without any MapboxMap interaction.
*/
@@ -20,6 +27,19 @@ public class SimpleMapActivity extends AppCompatActivity {
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
final Projection projection = mapboxMap.getProjection();
mapboxMap.setOnMapClickListener(new MapboxMap.OnMapClickListener() {
@Override
public void onMapClick(@NonNull LatLng point) {
Timber.e(projection.getVisibleRegion().toString());
}
});
}
});
}
@Override