Skip to content

Commit 3382b0a

Browse files
author
Seth Bourget
authored
wip (#211)
1 parent c7335fd commit 3382b0a

7 files changed

Lines changed: 146 additions & 2 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ android {
7373

7474
dependencies {
7575
// Mapbox Navigation SDK
76-
implementation "com.mapbox.navigationcore:navigation:3.3.0"
76+
implementation "com.mapbox.navigationcore:navigation:3.5.0-beta.1"
7777
implementation "com.mapbox.navigationcore:ui-components:3.3.0"
7878

7979
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21"

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@
118118
android:screenOrientation="portrait"
119119
android:exported="false"
120120
/>
121+
122+
<activity android:name=".standalone.isochrone.IsochroneRangeInMeters"
123+
android:screenOrientation="portrait"
124+
android:exported="false"
125+
/>
121126
</application>
122127

123128
</manifest>

app/src/main/java/com/mapbox/navigation/examples/standalone/StandaloneExamplesList.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.mapbox.navigation.examples.standalone.callout.RouteCalloutActivity
1111
import com.mapbox.navigation.examples.standalone.camera.ShowCameraTransitionsActivity
1212
import com.mapbox.navigation.examples.standalone.custompuck.CustomPuckActivity
1313
import com.mapbox.navigation.examples.standalone.fetchroute.FetchARouteActivity
14+
import com.mapbox.navigation.examples.standalone.isochrone.IsochroneRangeInMeters
1415
import com.mapbox.navigation.examples.standalone.location.ShowCurrentLocationActivity
1516
import com.mapbox.navigation.examples.standalone.maneuvers.ShowManeuversActivity
1617
import com.mapbox.navigation.examples.standalone.preview.PreviewActivity
@@ -132,7 +133,14 @@ fun Context.examplesList() = listOf(
132133
getString(R.string.title_custom_2d_puck),
133134
getString(R.string.description_custom_2d_puck),
134135
CustomPuckActivity::class.java
135-
)
136+
),
137+
138+
MapboxExample(
139+
ContextCompat.getDrawable(this, R.drawable.isochrone_activity_thumbnail),
140+
getString(R.string.title_isochrone_range),
141+
getString(R.string.description_isochrone_range),
142+
IsochroneRangeInMeters::class.java
143+
),
136144

137145
// TODO history replay doesn't work, will be fixed in the upcoming releases
138146
// MapboxExample(
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package com.mapbox.navigation.examples.standalone.isochrone
2+
3+
import android.annotation.SuppressLint
4+
import android.graphics.Color
5+
import android.os.Bundle
6+
import android.util.Log
7+
import androidx.appcompat.app.AppCompatActivity
8+
import androidx.lifecycle.lifecycleScope
9+
import com.mapbox.api.isochrone.IsochroneCriteria
10+
import com.mapbox.api.isochrone.MapboxIsochrone
11+
import com.mapbox.geojson.Point
12+
import com.mapbox.maps.CameraOptions
13+
import com.mapbox.maps.MapView
14+
import com.mapbox.maps.MapboxMap
15+
import com.mapbox.maps.Style
16+
import com.mapbox.maps.extension.style.layers.addLayer
17+
import com.mapbox.maps.extension.style.layers.generated.fillLayer
18+
import com.mapbox.maps.extension.style.sources.addSource
19+
import com.mapbox.maps.extension.style.sources.generated.GeoJsonSource
20+
import com.mapbox.maps.extension.style.sources.generated.geoJsonSource
21+
import com.mapbox.maps.extension.style.sources.getSourceAs
22+
import com.mapbox.navigation.examples.R
23+
import com.mapbox.navigation.examples.databinding.ActivityIsochroneRangePreviewBinding
24+
import kotlinx.coroutines.Dispatchers
25+
import kotlinx.coroutines.async
26+
import kotlinx.coroutines.launch
27+
28+
class IsochroneRangeInMeters : AppCompatActivity() {
29+
30+
private val TAG = "IsochroneRangeInMeters"
31+
32+
/**
33+
* Bindings to the example layout.
34+
*/
35+
private lateinit var binding: ActivityIsochroneRangePreviewBinding
36+
37+
/**
38+
* Mapbox Maps entry point obtained from the [MapView].
39+
* You need to get a new reference to this object whenever the [MapView] is recreated.
40+
*/
41+
private var mapboxMap: MapboxMap? = null
42+
43+
@SuppressLint("MissingPermission")
44+
override fun onCreate(savedInstanceState: Bundle?) {
45+
super.onCreate(savedInstanceState)
46+
binding = ActivityIsochroneRangePreviewBinding.inflate(layoutInflater)
47+
setContentView(binding.root)
48+
mapboxMap = binding.mapView.getMapboxMap()
49+
initStyle()
50+
loadIsochrone()
51+
}
52+
53+
override fun onDestroy() {
54+
super.onDestroy()
55+
mapboxMap = null
56+
}
57+
58+
@SuppressLint("MissingPermission")
59+
private fun initStyle() {
60+
mapboxMap?.loadStyle(
61+
"mapbox://styles/mapbox/light-v10"
62+
) { style: Style ->
63+
// Create the source for the Isochrone.
64+
geoJsonSource("myIsochroneSource").apply {
65+
style.addSource(this)
66+
}
67+
// Create the layer for the Isochrone.
68+
fillLayer("myIsochroneLayer", "myIsochroneSource") {
69+
fillOpacity(.5)
70+
fillColor(Color.parseColor("#ffcc00"))
71+
}.apply {
72+
style.addLayer(this)
73+
}
74+
75+
val cameraOptions = CameraOptions.Builder().center(Point.fromLngLat(-73.990593, 40.740121)).zoom(12.0).build()
76+
mapboxMap?.setCamera(cameraOptions)
77+
}
78+
}
79+
80+
private fun loadIsochrone() {
81+
val mapboxIsochrone = MapboxIsochrone.builder()
82+
.accessToken(getString(R.string.mapbox_access_token))
83+
.coordinates(Point.fromLngLat(-73.990593, 40.740121))
84+
.addContoursMeters(1000)
85+
.profile(IsochroneCriteria.PROFILE_DRIVING_TRAFFIC)
86+
.polygons(true)
87+
.build()
88+
89+
lifecycleScope.launch {
90+
val deferredResponse = async(Dispatchers.IO) {
91+
mapboxIsochrone.executeCall()
92+
}
93+
val response = deferredResponse.await()
94+
if (response.isSuccessful) {
95+
val featureCollection = response.body()
96+
if (featureCollection != null) {
97+
mapboxMap?.getStyle { style ->
98+
val source = style.getSourceAs<GeoJsonSource>("myIsochroneSource")
99+
source?.featureCollection(featureCollection, "")
100+
}
101+
}
102+
} else {
103+
Log.d(TAG, "Failed to get Isochrone, ${response.errorBody()}")
104+
}
105+
}
106+
}
107+
}
95.4 KB
Loading
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:id="@+id/container"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent">
7+
8+
<com.mapbox.maps.MapView
9+
android:id="@+id/mapView"
10+
android:layout_width="0dp"
11+
android:layout_height="0dp"
12+
app:layout_constraintBottom_toBottomOf="parent"
13+
app:layout_constraintEnd_toEndOf="parent"
14+
app:layout_constraintStart_toStartOf="parent"
15+
app:layout_constraintTop_toTopOf="parent"
16+
/>
17+
18+
19+
20+
</androidx.constraintlayout.widget.ConstraintLayout>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<resources>
2+
<string name="title_isochrone_range">Isochrone Range Preview</string>
3+
<string name="description_isochrone_range">Demonstrates using an isochrone.</string>
4+
</resources>

0 commit comments

Comments
 (0)