diff --git a/MapboxAndroidDemo/build.gradle b/MapboxAndroidDemo/build.gradle index 5a3ccbea1..fdb8196ea 100644 --- a/MapboxAndroidDemo/build.gradle +++ b/MapboxAndroidDemo/build.gradle @@ -88,6 +88,8 @@ dependencies { // Mapbox dependencies api (dependenciesList.mapboxMapSdk) + implementation dependenciesList.mapboxTurf + implementation dependenciesList.mapboGeoJson // Mapbox plugins implementation dependenciesList.mapboxPluginLocationLayer diff --git a/MapboxAndroidDemo/src/main/AndroidManifest.xml b/MapboxAndroidDemo/src/main/AndroidManifest.xml index 848ba3222..472ed3011 100644 --- a/MapboxAndroidDemo/src/main/AndroidManifest.xml +++ b/MapboxAndroidDemo/src/main/AndroidManifest.xml @@ -129,7 +129,7 @@ android:label="@string/activity_plugins_places_plugin_title"> + android:value="com.mapbox.mapboxandroiddemo.MainActivity" /> + android:label="@string/activity_lab_symbol_layer_and_mapillary_on_map_title" + android:screenOrientation="portrait"> diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java index fac235bdf..ac0850253 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/MainActivity.java @@ -55,8 +55,8 @@ import com.mapbox.mapboxandroiddemo.examples.extrusions.PopulationDensityExtrusionActivity; import com.mapbox.mapboxandroiddemo.examples.extrusions.RotationExtrusionActivity; import com.mapbox.mapboxandroiddemo.examples.javaservices.DirectionsActivity; -import com.mapbox.mapboxandroiddemo.examples.javaservices.MatrixApiActivity; import com.mapbox.mapboxandroiddemo.examples.javaservices.MapMatchingActivity; +import com.mapbox.mapboxandroiddemo.examples.javaservices.MatrixApiActivity; import com.mapbox.mapboxandroiddemo.examples.javaservices.OptimizationActivity; import com.mapbox.mapboxandroiddemo.examples.javaservices.SimplifyPolylineActivity; import com.mapbox.mapboxandroiddemo.examples.javaservices.StaticImageActivity; diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/DirectionsActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/DirectionsActivity.java index 035f18e03..70c6e3c66 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/DirectionsActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/DirectionsActivity.java @@ -6,6 +6,11 @@ import android.util.Log; import android.widget.Toast; +import com.mapbox.api.directions.v5.DirectionsCriteria; +import com.mapbox.api.directions.v5.MapboxDirections; +import com.mapbox.api.directions.v5.models.DirectionsResponse; +import com.mapbox.api.directions.v5.models.DirectionsRoute; +import com.mapbox.geojson.Point; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.MarkerOptions; @@ -14,10 +19,6 @@ import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.services.api.directions.v5.DirectionsCriteria; -import com.mapbox.services.api.directions.v5.MapboxDirections; -import com.mapbox.services.api.directions.v5.models.DirectionsResponse; -import com.mapbox.services.api.directions.v5.models.DirectionsRoute; import com.mapbox.services.commons.geojson.LineString; import com.mapbox.services.commons.models.Position; @@ -53,10 +54,10 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_javaservices_directions); // Alhambra landmark in Granada, Spain. - final Position origin = Position.fromCoordinates(-3.588098, 37.176164); + final Point origin = Point.fromLngLat(-3.588098, 37.176164); // Plaza del Triunfo in Granada, Spain. - final Position destination = Position.fromCoordinates(-3.601845, 37.184080); + final Point destination = Point.fromLngLat(-3.601845, 37.184080); // Setup the MapView @@ -69,11 +70,11 @@ public void onMapReady(MapboxMap mapboxMap) { // Add origin and destination to the map mapboxMap.addMarker(new MarkerOptions() - .position(new LatLng(origin.getLatitude(), origin.getLongitude())) + .position(new LatLng(origin.latitude(), origin.longitude())) .title(getString(R.string.directions_activity_marker_options_origin_title)) .snippet(getString(R.string.directions_activity_marker_options_origin_snippet))); mapboxMap.addMarker(new MarkerOptions() - .position(new LatLng(destination.getLatitude(), destination.getLongitude())) + .position(new LatLng(destination.latitude(), destination.longitude())) .title(getString(R.string.directions_activity_marker_options_destination_title)) .snippet(getString(R.string.directions_activity_marker_options_destination_snippet))); @@ -83,14 +84,14 @@ public void onMapReady(MapboxMap mapboxMap) { }); } - private void getRoute(Position origin, Position destination) { + private void getRoute(Point origin, Point destination) { - client = new MapboxDirections.Builder() - .setOrigin(origin) - .setDestination(destination) - .setOverview(DirectionsCriteria.OVERVIEW_FULL) - .setProfile(DirectionsCriteria.PROFILE_CYCLING) - .setAccessToken(getString(R.string.access_token)) + client = MapboxDirections.builder() + .origin(origin) + .destination(destination) + .overview(DirectionsCriteria.OVERVIEW_FULL) + .profile(DirectionsCriteria.PROFILE_CYCLING) + .accessToken(getString(R.string.access_token)) .build(); client.enqueueCall(new Callback() { @@ -103,16 +104,16 @@ public void onResponse(Call call, Response call, Throwable throwable) { private void drawRoute(DirectionsRoute route) { // Convert LineString coordinates into LatLng[] - LineString lineString = LineString.fromPolyline(route.getGeometry(), PRECISION_6); + LineString lineString = LineString.fromPolyline(route.geometry(), PRECISION_6); List coordinates = lineString.getCoordinates(); LatLng[] points = new LatLng[coordinates.size()]; for (int i = 0; i < coordinates.size(); i++) { diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/MapMatchingActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/MapMatchingActivity.java index 2c131b7f8..a146def4b 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/MapMatchingActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/MapMatchingActivity.java @@ -6,6 +6,11 @@ import android.support.v7.app.AppCompatActivity; import android.util.Log; +import com.mapbox.api.matching.v5.MapboxMapMatching; +import com.mapbox.api.matching.v5.models.MapMatchingResponse; +import com.mapbox.core.exceptions.ServicesException; +import com.mapbox.geojson.Point; +import com.mapbox.geojson.utils.PolylineUtils; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.Polyline; @@ -15,14 +20,9 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.services.Constants; -import com.mapbox.services.api.ServicesException; -import com.mapbox.services.api.mapmatching.v5.MapMatchingCriteria; -import com.mapbox.services.api.mapmatching.v5.MapboxMapMatching; -import com.mapbox.services.api.mapmatching.v5.models.MapMatchingResponse; import com.mapbox.services.commons.geojson.FeatureCollection; import com.mapbox.services.commons.geojson.LineString; import com.mapbox.services.commons.models.Position; -import com.mapbox.services.commons.utils.PolylineUtils; import java.io.BufferedReader; import java.io.InputStream; @@ -35,6 +35,9 @@ import retrofit2.Callback; import retrofit2.Response; +import static com.mapbox.api.directions.v5.DirectionsCriteria.PROFILE_DRIVING; + + /** * Match raw GPS points to the map so they align with roads and pathways. */ @@ -57,7 +60,7 @@ protected void onCreate(Bundle savedInstanceState) { // This contains the MapView in XML and needs to be called after the access token is configured. setContentView(R.layout.activity_javaservices_map_matching); - mapView = (MapView) findViewById(R.id.mapView); + mapView = findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); mapView.getMapAsync(new OnMapReadyCallback() { @Override @@ -110,11 +113,11 @@ protected void onSaveInstanceState(Bundle outState) { mapView.onSaveInstanceState(outState); } - private class DrawGeoJson extends AsyncTask> { + private class DrawGeoJson extends AsyncTask> { @Override - protected List doInBackground(Void... voids) { + protected List doInBackground(Void... voids) { - List points = new ArrayList<>(); + List points = new ArrayList<>(); try { // Load GeoJSON file @@ -125,54 +128,54 @@ protected List doInBackground(Void... voids) { while ((cp = rd.read()) != -1) { sb.append((char) cp); } - inputStream.close(); FeatureCollection featureCollection = FeatureCollection.fromJson(sb.toString()); LineString lineString = (LineString) featureCollection.getFeatures().get(0).getGeometry(); - points = lineString.getCoordinates(); + for (Position singlePosition : lineString.getCoordinates()) { + points.add(Point.fromLngLat(singlePosition.getLongitude(), + singlePosition.getLatitude())); + } } catch (Exception exception) { Log.e(TAG, "Exception Loading GeoJSON: " + exception.toString()); } - return points; } @Override - protected void onPostExecute(List points) { + protected void onPostExecute(List points) { super.onPostExecute(points); drawBeforeMapMatching(points); - - Position[] coordinates = new Position[points.size()]; - drawMapMatched(points.toArray(coordinates)); + drawMapMatched(points); } } - private void drawBeforeMapMatching(List points) { + private void drawBeforeMapMatching(List points) { LatLng[] pointsArray = new LatLng[points.size()]; for (int i = 0; i < points.size(); i++) { - pointsArray[i] = new LatLng(points.get(i).getLatitude(), points.get(i).getLongitude()); + pointsArray[i] = new LatLng(points.get(i).latitude(), points.get(i).longitude()); } map.addPolyline(new PolylineOptions() - .add(pointsArray) - .color(Color.parseColor("#8a8acb")) - .alpha(0.65f) - .width(4)); + .add(pointsArray) + .color(Color.parseColor("#8a8acb")) + .alpha(0.65f) + .width(4)); } - private void drawMapMatched(Position[] coordinates) { + private void drawMapMatched(List coordinates) { try { // Setup the request using a client. - MapboxMapMatching client = new MapboxMapMatching.Builder() - .setAccessToken(Mapbox.getAccessToken()) - .setProfile(MapMatchingCriteria.PROFILE_DRIVING) - .setCoordinates(coordinates) - .build(); + MapboxMapMatching client = MapboxMapMatching.builder() + .accessToken(Mapbox.getAccessToken()) + .profile(PROFILE_DRIVING) + .coordinates(coordinates) + .build(); // Execute the API call and handle the response. client.enqueueCall(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, + Response response) { // Create a new list to store the map matched coordinates. List mapMatchedPoints = new ArrayList<>(); @@ -181,16 +184,15 @@ public void onResponse(Call call, Response positions = PolylineUtils.decode(geometry, Constants.PRECISION_6); - if (positions == null) { + String geometry = response.body().matchings().get(0).geometry(); + List pointList = PolylineUtils.decode(geometry, Constants.PRECISION_6); + if (pointList == null) { return; } - for (int i = 0; i < positions.size(); i++) { - mapMatchedPoints.add(new LatLng( - positions.get(i).getLatitude(), - positions.get(i).getLongitude())); + for (Point singlePosition : pointList) { + mapMatchedPoints.add(new LatLng(singlePosition.latitude(), + singlePosition.longitude())); } if (mapMatchedRoute != null) { @@ -199,9 +201,9 @@ public void onResponse(Call call, Response positionList; + private List pointList; private FeatureCollection featureCollection; private RecyclerView recyclerView; private MatrixApiLocationRecyclerViewAdapter matrixApiLocationRecyclerViewAdapter; @@ -95,13 +97,13 @@ public boolean onMarkerClick(@NonNull Marker marker) { // Make a call to the Mapbox Matrix API makeMapboxMatrixApiCall(getClickedMarkerNumInPositionList(marker), Position.fromCoordinates( - marker.getPosition().getLongitude(), - marker.getPosition().getLatitude())); + marker.getPosition().getLongitude(), + marker.getPosition().getLatitude())); return false; } }); Toast.makeText(MatrixApiActivity.this, R.string.click_on_marker_instruction_toast, - Toast.LENGTH_SHORT).show(); + Toast.LENGTH_SHORT).show(); } }); } @@ -122,9 +124,9 @@ private int getClickedMarkerNumInPositionList(Marker clickedMarker) { private void initRecyclerView() { matrixApiLocationRecyclerViewAdapter = new MatrixApiLocationRecyclerViewAdapter(this, - matrixLocationList); + matrixLocationList); recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), - LinearLayoutManager.HORIZONTAL, true)); + LinearLayoutManager.HORIZONTAL, true)); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setAdapter(matrixApiLocationRecyclerViewAdapter); SnapHelper snapHelper = new LinearSnapHelper(); @@ -134,24 +136,23 @@ private void initRecyclerView() { private void makeMapboxMatrixApiCall(final int markerPositionInList, Position positionOfClickedMarker) { // Build Mapbox Matrix API parameters - MapboxDirectionsMatrix directionsMatrixClient = new MapboxDirectionsMatrix.Builder() - .setAccessToken(getString(R.string.access_token)) - .setProfile(DirectionsCriteria.PROFILE_DRIVING) - .setOrigin(positionOfClickedMarker) - .setCoordinates(positionList) - .build(); + MapboxMatrix directionsMatrixClient = MapboxMatrix.builder() + .accessToken(getString(R.string.access_token)) + .profile(DirectionsCriteria.PROFILE_DRIVING) + .coordinates(pointList) + .build(); // Handle the API response - directionsMatrixClient.enqueueCall(new Callback() { + directionsMatrixClient.enqueueCall(new Callback() { @Override - public void onResponse(Call call, - Response response) { - double[][] durationsToAllOfTheLocationsFromTheORigin = response.body().getDurations(); - for (int x = 0; x < durationsToAllOfTheLocationsFromTheORigin.length; x++) { + public void onResponse(Call call, + Response response) { + List durationsToAllOfTheLocationsFromTheOrigin = response.body().durations(); + for (int x = 0; x < durationsToAllOfTheLocationsFromTheOrigin.size(); x++) { String finalConvertedFormattedDistance = String.valueOf(new DecimalFormat("#.##") - .format(TurfHelpers.convertDistance( - durationsToAllOfTheLocationsFromTheORigin[markerPositionInList][x], - "meters", "miles"))); + .format(TurfConversion.convertDistance( + durationsToAllOfTheLocationsFromTheOrigin.get(markerPositionInList)[x], + "meters", "miles"))); if (x == markerPositionInList) { matrixLocationList.get(x).setDistanceFromOrigin(finalConvertedFormattedDistance); } @@ -163,9 +164,9 @@ public void onResponse(Call call, } @Override - public void onFailure(Call call, Throwable throwable) { + public void onFailure(Call call, Throwable throwable) { Toast.makeText(MatrixApiActivity.this, R.string.call_error, - Toast.LENGTH_SHORT).show(); + Toast.LENGTH_SHORT).show(); Log.d("MatrixApiActivity", "onResponse onFailure"); } }); @@ -173,13 +174,13 @@ public void onFailure(Call call, Throwable throwable) private void addMarkers() { Icon lightningBoltIcon = IconFactory.getInstance(MatrixApiActivity.this) - .fromResource(R.drawable.lightning_bolt); - for (Feature feature : featureCollection.getFeatures()) { + .fromResource(R.drawable.lightning_bolt); + for (Feature feature : featureCollection.features()) { mapboxMap.addMarker(new MarkerOptions() - .position(new LatLng(feature.getProperty("Latitude").getAsDouble(), - feature.getProperty("Longitude").getAsDouble())) - .snippet(feature.getStringProperty("Station_Name")) - .icon(lightningBoltIcon)); + .position(new LatLng(feature.getProperty("Latitude").getAsDouble(), + feature.getProperty("Longitude").getAsDouble())) + .snippet(feature.getStringProperty("Station_Name")) + .icon(lightningBoltIcon)); } } @@ -205,24 +206,23 @@ private void initPositionListFromGeoJsonFile() { featureCollection = FeatureCollection.fromJson(loadGeoJsonFromAsset("boston_charge_stations.geojson")); // Initialize List for eventual use in the Matrix API call - positionList = new ArrayList<>(); + pointList = new ArrayList<>(); // Get the position of each GeoJSON feature and build the list of Position // objects for eventual use in the Matrix API call - for (Feature singleLocation : featureCollection.getFeatures()) { - Position singleLocationPosition = (Position) singleLocation.getGeometry().getCoordinates(); - positionList.add(singleLocationPosition); + for (Feature singleLocation : featureCollection.features()) { + pointList.add((Point) singleLocation.geometry()); } } private void initMatrixLocationListForRecyclerView() { matrixLocationList = new ArrayList<>(); - for (int x = 0; x < featureCollection.getFeatures().size(); x++) { + for (Feature feature : featureCollection.features()) { SingleRecyclerViewMatrixLocation singleRecyclerViewLocation = new SingleRecyclerViewMatrixLocation(); - singleRecyclerViewLocation.setName(featureCollection.getFeatures().get(x) - .getStringProperty("Station_Name")); - singleRecyclerViewLocation.setLocationLatLng(new LatLng(positionList.get(x).getLatitude(), - positionList.get(x).getLongitude())); + singleRecyclerViewLocation.setName(feature.getStringProperty("Station_Name")); + singleRecyclerViewLocation.setLocationLatLng(new LatLng(((Point) + feature.geometry()).latitude(), + ((Point) feature.geometry()).longitude())); matrixLocationList.add(singleRecyclerViewLocation); } } @@ -301,7 +301,7 @@ public void setLocationLatLng(LatLng locationLatLng) { } static class MatrixApiLocationRecyclerViewAdapter extends - RecyclerView.Adapter { + RecyclerView.Adapter { private List matrixLocationList; private Context context; @@ -315,7 +315,7 @@ public MatrixApiLocationRecyclerViewAdapter(Context context, @Override public MatrixApiLocationRecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.rv_matrix_card, parent, false); + .inflate(R.layout.rv_matrix_card, parent, false); return new MatrixApiLocationRecyclerViewAdapter.MyViewHolder(itemView); } @@ -325,8 +325,8 @@ public void onBindViewHolder(MatrixApiLocationRecyclerViewAdapter.MyViewHolder h holder.name.setText(singleRecyclerViewLocation.getName()); String finalDistance = singleRecyclerViewLocation.getDistanceFromOrigin() - == null ? "" : String.format(context.getString(R.string.miles_distance), - singleRecyclerViewLocation.getDistanceFromOrigin()); + == null ? "" : String.format(context.getString(R.string.miles_distance), + singleRecyclerViewLocation.getDistanceFromOrigin()); holder.distance.setText(finalDistance); } diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/OptimizationActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/OptimizationActivity.java index bb64907f9..e87b4eecc 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/OptimizationActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/OptimizationActivity.java @@ -7,6 +7,11 @@ import android.util.Log; import android.widget.Toast; +import com.mapbox.api.directions.v5.DirectionsCriteria; +import com.mapbox.api.directions.v5.models.DirectionsRoute; +import com.mapbox.api.optimization.v1.MapboxOptimization; +import com.mapbox.api.optimization.v1.models.OptimizationResponse; +import com.mapbox.geojson.Point; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.MarkerOptions; @@ -16,16 +21,13 @@ import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.services.api.directions.v5.DirectionsCriteria; -import com.mapbox.services.api.directions.v5.models.DirectionsRoute; -import com.mapbox.services.api.optimizedtrips.v1.MapboxOptimizedTrips; -import com.mapbox.services.api.optimizedtrips.v1.models.OptimizedTripsResponse; import com.mapbox.services.commons.geojson.LineString; import com.mapbox.services.commons.models.Position; import java.util.ArrayList; import java.util.List; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -41,10 +43,10 @@ public class OptimizationActivity extends AppCompatActivity implements OnMapRead private MapView mapView; private MapboxMap mapboxMap; private DirectionsRoute optimizedRoute; - private MapboxOptimizedTrips optimizedClient; + private MapboxOptimization optimizedClient; private Polyline optimizedPolyline; - private List stops; - private Position origin; + private List stops; + private Point origin; private static final String FIRST = "first"; private static final String ANY = "any"; @@ -78,7 +80,7 @@ public void onMapReady(MapboxMap mapboxMap) { this.mapboxMap = mapboxMap; // Add origin and destination to the mapboxMap mapboxMap.addMarker(new MarkerOptions() - .position(new LatLng(origin.getLatitude(), origin.getLongitude())) + .position(new LatLng(origin.latitude(), origin.longitude())) .title(getString(R.string.origin))); Toast.makeText(OptimizationActivity.this, R.string.click_instructions, Toast.LENGTH_SHORT).show(); mapboxMap.addOnMapClickListener(this); @@ -119,36 +121,36 @@ private void addDestinationMarker(LatLng point) { } private void addPointToStopsList(LatLng point) { - stops.add(Position.fromCoordinates(point.getLongitude(), point.getLatitude())); + stops.add(Point.fromLngLat(point.getLongitude(), point.getLatitude())); } private void addFirstStopToStopsList() { // Set first stop - origin = Position.fromCoordinates(30.335098600000038, 59.9342802); + origin = Point.fromLngLat(30.335098600000038, 59.9342802); stops.add(origin); } - private void getOptimizedRoute(List coordinates) { - optimizedClient = new MapboxOptimizedTrips.Builder() - .setSource(FIRST) - .setDestination(ANY) - .setCoordinates(coordinates) - .setOverview(DirectionsCriteria.OVERVIEW_FULL) - .setProfile(DirectionsCriteria.PROFILE_DRIVING) - .setAccessToken(Mapbox.getAccessToken()) + private void getOptimizedRoute(List coordinates) { + optimizedClient = MapboxOptimization.builder() + .source(FIRST) + .destination(ANY) + .coordinates(coordinates) + .overview(DirectionsCriteria.OVERVIEW_FULL) + .profile(DirectionsCriteria.PROFILE_DRIVING) + .accessToken(Mapbox.getAccessToken()) .build(); - optimizedClient.enqueueCall(new Callback() { + optimizedClient.enqueueCall(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { if (!response.isSuccessful()) { Log.d("DirectionsActivity", getString(R.string.no_success)); Toast.makeText(OptimizationActivity.this, R.string.no_success, Toast.LENGTH_SHORT).show(); return; } else { - if (response.body().getTrips().isEmpty()) { + if (response.body().trips().isEmpty()) { Log.d("DirectionsActivity", getString(R.string.successful_but_no_routes) + " size = " - + response.body().getTrips().size()); + + response.body().trips().size()); Toast.makeText(OptimizationActivity.this, R.string.successful_but_no_routes, Toast.LENGTH_SHORT).show(); return; @@ -156,12 +158,12 @@ public void onResponse(Call call, Response call, Throwable throwable) { + public void onFailure(Call call, Throwable throwable) { Log.d("DirectionsActivity", "Error: " + throwable.getMessage()); } }); @@ -182,7 +184,7 @@ private void drawOptimizedRoute(DirectionsRoute route) { private LatLng[] convertLineStringToLatLng(DirectionsRoute route) { // Convert LineString coordinates into LatLng[] - LineString lineString = LineString.fromPolyline(route.getGeometry(), PRECISION_6); + LineString lineString = LineString.fromPolyline(route.geometry(), PRECISION_6); List coordinates = lineString.getCoordinates(); LatLng[] points = new LatLng[coordinates.size()]; for (int i = 0; i < coordinates.size(); i++) { diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/StaticImageActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/StaticImageActivity.java index 69aa6eb09..56d5393b2 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/StaticImageActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/javaservices/StaticImageActivity.java @@ -7,10 +7,11 @@ import android.view.View; import android.widget.ImageView; +import com.mapbox.api.staticmap.v1.MapboxStaticMap; +import com.mapbox.geojson.Point; import com.mapbox.mapboxandroiddemo.MainActivity; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.services.Constants; -import com.mapbox.services.api.staticimage.v1.MapboxStaticImage; import com.squareup.picasso.Picasso; /** @@ -29,46 +30,43 @@ protected void onCreate(Bundle savedInstanceState) { ImageView parisImageView = (ImageView) findViewById(R.id.parisImageView); ImageView londonImageView = (ImageView) findViewById(R.id.londonImageView); - MapboxStaticImage veniceStaticImage = new MapboxStaticImage.Builder() - .setAccessToken(getString(R.string.access_token)) - .setStyleId(Constants.MAPBOX_STYLE_LIGHT) - .setLat(45.4338) // Image center Latitude - .setLon(12.3378) // Image center longitude - .setZoom(13) - .setWidth(320) // Image width - .setHeight(320) // Image height - .setRetina(true) // Retina 2x image will be returned + MapboxStaticMap veniceStaticImage = MapboxStaticMap.builder() + .accessToken(getString(R.string.access_token)) + .styleId(Constants.MAPBOX_STYLE_LIGHT) + .cameraPoint(Point.fromLngLat(12.3378, 45.4338)) + .cameraZoom(13) + .width(320) // Image width + .height(320) // Image height + .retina(true) // Retina 2x image will be returned .build(); - Picasso.with(this).load(veniceStaticImage.getUrl().toString()).into(veniceImageView); + Picasso.with(this).load(veniceStaticImage.url().toString()).into(veniceImageView); - MapboxStaticImage parisStaticImage = new MapboxStaticImage.Builder() - .setAccessToken(getString(R.string.access_token)) - .setStyleId(Constants.MAPBOX_STYLE_OUTDOORS) - .setLat(48.85826) - .setLon(2.29450) - .setZoom(16) - .setPitch(20) - .setBearing(60) - .setWidth(320) - .setHeight(320) - .setRetina(true) + MapboxStaticMap parisStaticImage = MapboxStaticMap.builder() + .accessToken(getString(R.string.access_token)) + .styleId(Constants.MAPBOX_STYLE_OUTDOORS) + .cameraPoint(Point.fromLngLat(2.29450, 48.85826)) + .cameraZoom(16) + .cameraPitch(20) + .cameraBearing(60) + .width(320) + .height(320) + .retina(true) .build(); - Picasso.with(this).load(parisStaticImage.getUrl().toString()).into(parisImageView); + Picasso.with(this).load(parisStaticImage.url().toString()).into(parisImageView); - MapboxStaticImage londonStaticImage = new MapboxStaticImage.Builder() - .setAccessToken(getString(R.string.access_token)) - .setStyleId(Constants.MAPBOX_STYLE_STREETS) - .setLat(51.5062) - .setLon(-0.0756) - .setZoom(14) - .setWidth(320) - .setHeight(320) - .setRetina(true) + MapboxStaticMap londonStaticImage = MapboxStaticMap.builder() + .accessToken(getString(R.string.access_token)) + .styleId(Constants.MAPBOX_STYLE_STREETS) + .cameraPoint(Point.fromLngLat(-0.0756, 51.5062)) + .cameraZoom(14) + .width(320) + .height(320) + .retina(true) .build(); - Picasso.with(this).load(londonStaticImage.getUrl().toString()).into(londonImageView); + Picasso.with(this).load(londonStaticImage.url().toString()).into(londonImageView); banner = (CardView) findViewById(R.id.banner); banner.setOnClickListener(new View.OnClickListener() { @Override diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/LocationPluginActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/LocationPluginActivity.java index bdc96cf5f..4539a0167 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/LocationPluginActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/LocationPluginActivity.java @@ -15,10 +15,10 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode; import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin; -import com.mapbox.services.android.location.LostLocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngineListener; import com.mapbox.services.android.telemetry.location.LocationEnginePriority; +import com.mapbox.services.android.telemetry.location.LocationEngineProvider; import com.mapbox.services.android.telemetry.permissions.PermissionsListener; import com.mapbox.services.android.telemetry.permissions.PermissionsManager; @@ -61,7 +61,7 @@ public void onMapReady(MapboxMap mapboxMap) { private void enableLocationPlugin() { // Check if permissions are enabled and if not request if (PermissionsManager.areLocationPermissionsGranted(this)) { - // Create an instance of LOST location engine + // Create a location engine instance initializeLocationEngine(); locationPlugin = new LocationLayerPlugin(mapView, mapboxMap, locationEngine); @@ -74,7 +74,7 @@ private void enableLocationPlugin() { @SuppressWarnings( {"MissingPermission"}) private void initializeLocationEngine() { - locationEngine = new LostLocationEngine(LocationPluginActivity.this); + locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable(); locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY); locationEngine.activate(); diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/PlacesPluginActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/PlacesPluginActivity.java index b062d3da0..0d54eabad 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/PlacesPluginActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/plugins/PlacesPluginActivity.java @@ -29,6 +29,11 @@ import com.mapbox.services.commons.geojson.Feature; import com.mapbox.services.commons.geojson.FeatureCollection; +/** + * Use the places plugin to take advantage of Mapbox's location search ("geocoding") capabilities. The plugin + * automatically makes geocoding requests, has built-in saved locations, includes location picker functionality, + * and adds beautiful UI into your Android project. + */ public class PlacesPluginActivity extends AppCompatActivity implements OnMapReadyCallback { private static final int REQUEST_CODE_AUTOCOMPLETE = 1; diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/IndoorMapActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/IndoorMapActivity.java index b0dd85d47..4cca7a992 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/IndoorMapActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/IndoorMapActivity.java @@ -8,9 +8,10 @@ import android.view.animation.AlphaAnimation; import android.widget.Button; +import com.mapbox.geojson.Point; +import com.mapbox.geojson.Polygon; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; @@ -20,9 +21,7 @@ import com.mapbox.mapboxsdk.style.layers.FillLayer; import com.mapbox.mapboxsdk.style.layers.LineLayer; import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; -import com.mapbox.services.api.utils.turf.TurfException; -import com.mapbox.services.api.utils.turf.TurfJoins; -import com.mapbox.services.commons.models.Position; +import com.mapbox.turf.TurfJoins; import java.io.IOException; import java.io.InputStream; @@ -41,7 +40,8 @@ public class IndoorMapActivity extends AppCompatActivity { private GeoJsonSource indoorBuildingSource; - private List boundingBox; + private List boundingBox; + private List> boundingBoxList; private View levelButtons; private MapView mapView; private MapboxMap map; @@ -67,38 +67,34 @@ public void onMapReady(final MapboxMap mapboxMap) { levelButtons = findViewById(R.id.floor_level_buttons); boundingBox = new ArrayList<>(); - boundingBox.add(Position.fromCoordinates(-77.03791, 38.89715)); - boundingBox.add(Position.fromCoordinates(-77.03791, 38.89811)); - boundingBox.add(Position.fromCoordinates(-77.03532, 38.89811)); - boundingBox.add(Position.fromCoordinates(-77.03532, 38.89708)); - mapboxMap.setOnCameraChangeListener(new MapboxMap.OnCameraChangeListener() { + boundingBox.add(Point.fromLngLat(-77.03791, 38.89715)); + boundingBox.add(Point.fromLngLat(-77.03791, 38.89811)); + boundingBox.add(Point.fromLngLat(-77.03532, 38.89811)); + boundingBox.add(Point.fromLngLat(-77.03532, 38.89708)); + + boundingBoxList = new ArrayList<>(); + boundingBoxList.add(boundingBox); + + mapboxMap.addOnCameraMoveListener(new MapboxMap.OnCameraMoveListener() { @Override - public void onCameraChange(CameraPosition position) { - - if (position.zoom > 16) { - try { - if (TurfJoins.inside(Position.fromCoordinates( - position.target.getLongitude(), - position.target.getLatitude()), - boundingBox)) { - if (levelButtons.getVisibility() != View.VISIBLE) { - showLevelButton(); - } - } else { - if (levelButtons.getVisibility() == View.VISIBLE) { - hideLevelButton(); - } + public void onCameraMove() { + if (mapboxMap.getCameraPosition().zoom > 16) { + if (TurfJoins.inside(Point.fromLngLat(mapboxMap.getCameraPosition().target.getLongitude(), + mapboxMap.getCameraPosition().target.getLatitude()), Polygon.fromLngLats(boundingBoxList))) { + if (levelButtons.getVisibility() != View.VISIBLE) { + showLevelButton(); + } + } else { + if (levelButtons.getVisibility() == View.VISIBLE) { + hideLevelButton(); } - } catch (TurfException turfException) { - turfException.printStackTrace(); } } else if (levelButtons.getVisibility() == View.VISIBLE) { hideLevelButton(); } } }); - indoorBuildingSource = new GeoJsonSource("indoor-building", loadJsonFromAsset("white_house_lvl_0.geojson")); mapboxMap.addSource(indoorBuildingSource); @@ -106,8 +102,7 @@ public void onCameraChange(CameraPosition position) { loadBuildingLayer(); } }); - - Button buttonSecondLevel = (Button) findViewById(R.id.second_level_button); + Button buttonSecondLevel = findViewById(R.id.second_level_button); buttonSecondLevel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -115,7 +110,7 @@ public void onClick(View view) { } }); - Button buttonGroundLevel = (Button) findViewById(R.id.ground_level_button); + Button buttonGroundLevel = findViewById(R.id.ground_level_button); buttonGroundLevel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -189,27 +184,27 @@ private void loadBuildingLayer() { // line layer is added. FillLayer indoorBuildingLayer = new FillLayer("indoor-building-fill", "indoor-building").withProperties( - fillColor(Color.parseColor("#eeeeee")), - // Function.zoom is used here to fade out the indoor layer if zoom level is beyond 16. Only - // necessary to show the indoor map at high zoom levels. - fillOpacity(Function.zoom(Stops.exponential( - Stop.stop(17f, fillOpacity(1f)), - Stop.stop(16.5f, fillOpacity(0.5f)), - Stop.stop(16f, fillOpacity(0f)) - ))) + fillColor(Color.parseColor("#eeeeee")), + // Function.zoom is used here to fade out the indoor layer if zoom level is beyond 16. Only + // necessary to show the indoor map at high zoom levels. + fillOpacity(Function.zoom(Stops.exponential( + Stop.stop(17f, fillOpacity(1f)), + Stop.stop(16.5f, fillOpacity(0.5f)), + Stop.stop(16f, fillOpacity(0f)) + ))) ); map.addLayer(indoorBuildingLayer); LineLayer indoorBuildingLineLayer = new LineLayer("indoor-building-line", "indoor-building").withProperties( - lineColor(Color.parseColor("#50667f")), - lineWidth(0.5f), - lineOpacity(Function.zoom(Stops.exponential( - Stop.stop(17f, lineOpacity(1f)), - Stop.stop(16.5f, lineOpacity(0.5f)), - Stop.stop(16f, lineOpacity(0f)) - ))) + lineColor(Color.parseColor("#50667f")), + lineWidth(0.5f), + lineOpacity(Function.zoom(Stops.exponential( + Stop.stop(17f, lineOpacity(1f)), + Stop.stop(16.5f, lineOpacity(0.5f)), + Stop.stop(16f, lineOpacity(0f)) + ))) ); map.addLayer(indoorBuildingLineLayer); diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/LocationPickerActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/LocationPickerActivity.java index be4fdead3..454a79710 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/LocationPickerActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/LocationPickerActivity.java @@ -15,6 +15,12 @@ import android.widget.ImageView; import android.widget.Toast; +import com.mapbox.api.geocoding.v5.GeocodingCriteria; +import com.mapbox.api.geocoding.v5.MapboxGeocoding; +import com.mapbox.api.geocoding.v5.models.CarmenFeature; +import com.mapbox.api.geocoding.v5.models.GeocodingResponse; +import com.mapbox.core.exceptions.ServicesException; +import com.mapbox.geojson.Point; import com.mapbox.mapboxandroiddemo.R; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.Icon; @@ -23,24 +29,17 @@ import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.location.LocationSource; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode; import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin; -import com.mapbox.services.android.location.LostLocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngineListener; import com.mapbox.services.android.telemetry.location.LocationEnginePriority; +import com.mapbox.services.android.telemetry.location.LocationEngineProvider; import com.mapbox.services.android.telemetry.permissions.PermissionsListener; import com.mapbox.services.android.telemetry.permissions.PermissionsManager; -import com.mapbox.services.api.ServicesException; -import com.mapbox.services.api.geocoding.v5.GeocodingCriteria; -import com.mapbox.services.api.geocoding.v5.MapboxGeocoding; -import com.mapbox.services.api.geocoding.v5.models.CarmenFeature; -import com.mapbox.services.api.geocoding.v5.models.GeocodingResponse; -import com.mapbox.services.commons.models.Position; import java.util.List; @@ -77,7 +76,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_lab_location_picker); // Get the location engine object for later use. - locationEngine = new LocationSource(this); + locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable(); locationEngine.activate(); // Initialize the mapboxMap view @@ -123,7 +122,9 @@ public void onClick(View view) { float coordinateX = hoveringMarker.getLeft() + (hoveringMarker.getWidth() / 2); float coordinateY = hoveringMarker.getBottom(); float[] coords = new float[] {coordinateX, coordinateY}; - final LatLng latLng = mapboxMap.getProjection().fromScreenLocation(new PointF(coords[0], coords[1])); + final Point latLng = Point.fromLngLat(mapboxMap.getProjection().fromScreenLocation( + new PointF(coords[0], coords[1])).getLongitude(), mapboxMap.getProjection().fromScreenLocation( + new PointF(coords[0], coords[1])).getLatitude()); hoveringMarker.setVisibility(View.GONE); // Transform the appearance of the button to become the cancel button @@ -136,7 +137,9 @@ public void onClick(View view) { // Placing the marker on the mapboxMap as soon as possible causes the illusion // that the hovering marker and dropped marker are the same. - droppedMarker = mapboxMap.addMarker(new MarkerOptions().position(latLng).icon(icon)); + + droppedMarker = mapboxMap.addMarker(new MarkerOptions() + .position(new LatLng(latLng.latitude(), latLng.longitude()))); // Finally we get the geocoding information reverseGeocode(latLng); @@ -166,6 +169,7 @@ public void onResume() { } @Override + @SuppressWarnings( {"MissingPermission"}) protected void onStart() { super.onStart(); if (locationPlugin != null) { @@ -247,27 +251,28 @@ public void onPermissionResult(boolean granted) { } } - private void reverseGeocode(final LatLng point) { + private void reverseGeocode(final Point point) { // This method is used to reverse geocode where the user has dropped the marker. try { - MapboxGeocoding client = new MapboxGeocoding.Builder() - .setAccessToken(getString(R.string.access_token)) - .setCoordinates(Position.fromCoordinates(point.getLongitude(), point.getLatitude())) - .setGeocodingType(GeocodingCriteria.TYPE_ADDRESS) + + MapboxGeocoding client = MapboxGeocoding.builder() + .accessToken(getString(R.string.access_token)) + .query(Point.fromLngLat(point.longitude(), point.latitude())) + .geocodingTypes(GeocodingCriteria.TYPE_ADDRESS) .build(); client.enqueueCall(new Callback() { @Override public void onResponse(Call call, Response response) { - List results = response.body().getFeatures(); + List results = response.body().features(); if (results.size() > 0) { CarmenFeature feature = results.get(0); // If the geocoder returns a result, we take the first in the list and update // the dropped marker snippet with the information. Lastly we open the info // window. if (droppedMarker != null) { - droppedMarker.setSnippet(feature.getPlaceName()); + droppedMarker.setSnippet(feature.placeName()); mapboxMap.selectMarker(droppedMarker); } @@ -307,7 +312,7 @@ private void enableLocationPlugin() { @SuppressWarnings( {"MissingPermission"}) private void initializeLocationEngine() { - locationEngine = new LostLocationEngine(LocationPickerActivity.this); + locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable(); locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY); locationEngine.activate(); diff --git a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/SpaceStationLocationActivity.java b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/SpaceStationLocationActivity.java index fd38fb54c..4a68d2646 100644 --- a/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/SpaceStationLocationActivity.java +++ b/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/labs/SpaceStationLocationActivity.java @@ -22,8 +22,8 @@ import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.services.api.utils.turf.TurfMeasurement; -import com.mapbox.services.commons.models.Position; +import com.mapbox.geojson.Point; +import com.mapbox.turf.TurfMeasurement; import retrofit2.Call; import retrofit2.Callback; @@ -231,9 +231,8 @@ public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) { public static double computeHeading(LatLng from, LatLng to) { // Compute bearing/heading using Turf and return the value. return TurfMeasurement.bearing( - Position.fromCoordinates(from.getLongitude(), from.getLatitude()), - Position.fromCoordinates(to.getLongitude(), to.getLatitude()) - ); + Point.fromLngLat(from.getLongitude(), from.getLatitude()), + Point.fromLngLat(to.getLongitude(), to.getLatitude())); } // Interface used for Retrofit. diff --git a/MapboxAndroidDemo/src/main/res/layout/activity_places_plugin.xml b/MapboxAndroidDemo/src/main/res/layout/activity_places_plugin.xml index 94a9f2601..4b67b176f 100644 --- a/MapboxAndroidDemo/src/main/res/layout/activity_places_plugin.xml +++ b/MapboxAndroidDemo/src/main/res/layout/activity_places_plugin.xml @@ -11,7 +11,7 @@ android:layout_height="match_parent" mapbox:mapbox_cameraTargetLng="-43.334931" mapbox:mapbox_cameraZoom="0.346515" - mapbox:mapbox_styleUrl="mapbox://styles/mapbox/cj44mfrt20f082snokim4ungi" /> + mapbox:mapbox_styleUrl="@string/mapbox_style_mapbox_streets" />