Offline reverse geocoding
This example does not contain a UI. Results will be logged in Android Studio. To run this example you will need access to our Offline Data API. Contact our team to request access.
NOTE
This example is a part of the Search SDK for Android sample app. You can find the values for all referenced resources in the res
directory. For example, see res/values/strings.xml
for R.string.*
references used in this example.
package com.mapbox.search.sample.api import android.app.Activityimport android.os.Bundleimport android.util.Logimport com.mapbox.common.Cancelableimport com.mapbox.common.TileRegionLoadOptionsimport com.mapbox.common.TileStoreimport com.mapbox.geojson.Pointimport com.mapbox.search.common.AsyncOperationTaskimport com.mapbox.search.offline.OfflineIndexChangeEventimport com.mapbox.search.offline.OfflineIndexChangeEvent.EventTypeimport com.mapbox.search.offline.OfflineIndexErrorEventimport com.mapbox.search.offline.OfflineResponseInfoimport com.mapbox.search.offline.OfflineReverseGeoOptionsimport com.mapbox.search.offline.OfflineSearchCallbackimport com.mapbox.search.offline.OfflineSearchEngineimport com.mapbox.search.offline.OfflineSearchEngineSettingsimport com.mapbox.search.offline.OfflineSearchResultimport com.mapbox.search.sample.R class OfflineReverseGeocodingKotlinExampleActivity : Activity() { private lateinit var searchEngine: OfflineSearchEngineprivate lateinit var tilesLoadingTask: Cancelableprivate var searchRequestTask: AsyncOperationTask? = null private val engineReadyCallback = object : OfflineSearchEngine.EngineReadyCallback {override fun onEngineReady() {Log.i("SearchApiExample", "Engine is ready")}} private val searchCallback = object : OfflineSearchCallback { override fun onResults(results: List<OfflineSearchResult>, responseInfo: OfflineResponseInfo) {Log.i("SearchApiExample", "Results: $results")} override fun onError(e: Exception) {Log.i("SearchApiExample", "Search error", e)}} override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState) val tileStore = TileStore.create() searchEngine = OfflineSearchEngine.create(OfflineSearchEngineSettings(accessToken = getString(R.string.mapbox_access_token),tileStore = tileStore)) searchEngine.addEngineReadyCallback(engineReadyCallback) val descriptors = listOf(OfflineSearchEngine.createTilesetDescriptor()) val tileRegionId = "Washington DC"val dcLocation = Point.fromLngLat(-77.0339911055176, 38.899920004207516) val tileRegionLoadOptions = TileRegionLoadOptions.Builder().descriptors(descriptors).geometry(dcLocation).acceptExpired(true).build() searchEngine.addOnIndexChangeListener(object : OfflineSearchEngine.OnIndexChangeListener {override fun onIndexChange(event: OfflineIndexChangeEvent) {if (event.regionId == tileRegionId && (event.type == EventType.ADD || event.type == EventType.UPDATE)) {Log.i("SearchApiExample", "$tileRegionId was successfully added or updated") searchRequestTask = searchEngine.reverseGeocoding(OfflineReverseGeoOptions(center = dcLocation),searchCallback)}} override fun onError(event: OfflineIndexErrorEvent) {Log.i("SearchApiExample", "Offline index error: $event")}}) Log.i("SearchApiExample", "Loading tiles...") tilesLoadingTask = tileStore.loadTileRegion(tileRegionId,tileRegionLoadOptions,{ progress -> Log.i("SearchApiExample", "Loading progress: $progress") },{ result ->if (result.isValue) {Log.i("SearchApiExample", "Tiles successfully loaded: ${result.value}")} else {Log.i("SearchApiExample", "Tiles loading error: ${result.error}")}})} override fun onDestroy() {searchEngine.removeEngineReadyCallback(engineReadyCallback)tilesLoadingTask.cancel()searchRequestTask?.cancel()super.onDestroy()}}
Was this example helpful?