Mapbox Geocoder client for Android.
This library is also a full drop-in replacement for the standard Android Geocoder.
We recommend installing with Gradle. This will automatically install the necessary dependencies and pull the library binaries from the Mapbox Android repository on Maven Central.
To install the current stable version add this to your build.gradle
:
repositories {
mavenCentral()
}
dependencies {
compile ('com.mapbox.mapboxsdk:mapbox-android-geocoder:1.0.0@aar'){
transitive=true
}
}
To install the current SNAPSHOT version add this to your build.gradle
:
repositories {
mavenCentral()
maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
compile ('com.mapbox.mapboxsdk:mapbox-android-geocoder:1.1.0-SNAPSHOT@aar'){
transitive=true
}
}
To benefit from the full Mapbox Geocoder API, use the MapboxGeocoder
object.
For example, to do forward geocoding with proximity you could do the following:
MapboxGeocoder client = new MapboxGeocoder.Builder()
.setAccessToken(MAPBOX_ACCESS_TOKEN)
.setLocation("The White House")
.setProximity(longitude, latitude)
.build();
For reverse geocoding (turning a pair of lat/lon coordinates into a meaningful place name), restricting the results to points of interest (POI) you could do:
MapboxGeocoder client = new MapboxGeocoder.Builder()
.setAccessToken(MAPBOX_ACCESS_TOKEN)
.setCoordinates(longitude, latitude)
.setType(GeocoderCriteria.TYPE_POI)
.build();
Once the client
object has been created, you can launch a syncronous request
(remember not do this in the main UI thread):
Response<GeocoderResponse> response = client.execute();
Or an asynchronous request (you need to provide your own Callback<GeocoderResponse>
):
client.enqueue(callback)
If your app is currently using the standard Android Geocoder, you can simply switch to Mapbox
swapping android.location.Geocoder
with com.mapbox.geocoder.android.AndroidGeocoder
.
You only need to remember to set your access token as well.
For example, the reference sample for the Android Geocoder han an IntentService
that
doest the following:
import android.location.Geocoder;
...
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
addresses = geocoder.getFromLocation(
location.getLatitude(),
location.getLongitude(),
1);
The equivalent code, using Mapbox's implementation is simply:
import com.mapbox.geocoder.android.AndroidGeocoder;
...
AndroidGeocoder geocoder = new AndroidGeocoder(context, Locale.getDefault());
geocoder.setAccessToken(MAPBOX_ACCESS_TOKEN);
addresses = geocoder.getFromLocation(
location.getLatitude(),
location.getLongitude(),
1);
You can see the full code for this app in the samples/LocationAddress
folder.
Note that, unlike the Android implementation, we don't have any use for the
Context
in the constructor and you can omit it (passing null
) when
creating a new instance of AndroidGeocoder
.
If you want to implement an autocomplete widget like the one pictured above,
check the Geocoder Samples folder.
The MainActivity
shows how to implement a GeocoderAdapter
than you could pass to an Android AutoCompleteTextView
to create a geocoder autocomplete widget.
See the samples
folder for two complete apps that implement the Geocoder library:
-
LocationAddress
shows how to replace the stock Android geocoder with the Mapbox geocoder library. -
GeocoderSamples
includes both forward and reverse geocoder activities, including code to implement an autocomplete widget.
Both projects require that you supply your own MAPBOX_ACCESS_TOKEN
.