Page updated Jan 16, 2024

Work with location search

Add location search functionality on a map

First, make sure you've provisioned a search index resource and configured your app using the instructions in either Configure Location Search or Use existing Amazon Location Service resources and you have already setup displaying a map in your application.

AmplifyMapView provides built-in location search, search field, and place markers. Follow the AmplifyMapView section on the Maps page to setup the AmplifyMapView.

Location-based search capabilities

Amplify Geo enables you to search for locations by text, addresses, or geo-coordinates.

Search by text

The Amplify.Geo.searchByText() API enables you to search for places or points of interest by free-form text, such as an address, name, city, or region.

1String searchQuery = "Amazon Go";
2Amplify.Geo.searchByText(searchQuery,
3 result -> {
4 for (final Place place : result.getPlaces()) {
5 Log.i("MyAmplifyApp", place.toString());
6 }
7 },
8 error -> Log.e("MyAmplifyApp", "Failed to search for " + searchQuery, error)
9);
1val searchQuery = "Amazon Go"
2Amplify.Geo.searchByText(searchQuery,
3 {
4 for (place in it.places) {
5 Log.i("MyAmplifyApp", place.toString())
6 }
7 },
8 { Log.e("MyAmplifyApp", "Failed to search for $searchQuery", it) }
9)
1val searchQuery = "Amazon Go"
2try {
3 val result = Amplify.Geo.searchByText(searchQuery)
4 for (place in result.places) {
5 Log.i("MyAmplifyApp", place.toString())
6 }
7} catch (error: GeoException) {
8 Log.e("MyAmplifyApp", "Failed to search for $searchQuery", it)
9}
1String searchQuery = "Amazon Go";
2RxAmplify.Geo.searchByText(searchQuery).subscribe(
3 result -> {
4 for (final Place place : result.getPlaces()) {
5 Log.i("MyAmplifyApp", place.toString());
6 }
7 },
8 error -> Log.e("MyAmplifyApp", "Failed to search for " + searchQuery, error)
9);

Restrict your search results by specifying following parameters inside GeoSearchByTextOptions:

  • countries - to limit the search results to given countries. Follows ISO Alpha-3 country codes. (defaults to "USA")
  • maxResults - to limit the maximum result set (defaults to 50)
  • searchArea
    • near - to act as the search origination location
    • within - to limit the area to search inside of
1Coordinates position = new Coordinates(47.6153, -122.3384);
2GeoSearchByTextOptions options = GeoSearchByTextOptions.builder()
3 .maxResults(10)
4 .searchArea(SearchArea.near(position))
5 .countries(Collections.singletonList(CountryCode.USA))
6 .build();
1val position = Coordinates(47.6153, -122.3384)
2val options = GeoSearchByTextOptions.builder()
3 .maxResults(10)
4 .searchArea(SearchArea.near(position))
5 .countries(listOf(CountryCode.USA))
6 .build()
1val position = Coordinates(47.6153, -122.3384)
2val options = GeoSearchByTextOptions.builder()
3 .maxResults(10)
4 .searchArea(SearchArea.near(position))
5 .countries(listOf(CountryCode.USA))
6 .build()
1Coordinates position = new Coordinates(47.6153, -122.3384);
2GeoSearchByTextOptions options = GeoSearchByTextOptions.builder()
3 .maxResults(10)
4 .searchArea(SearchArea.near(position))
5 .countries(Collections.singletonList(CountryCode.USA))
6 .build();

Search by coordinates

The Amplify.Geo.searchByCoordinates() API is a reverse Geocoder that takes a coordinate point and returns information about what it finds at that point on the map. The returned object is the same shape as Amplify.Geo.searchByText() API.

1Coordinates position = new Coordinates(47.6153, -122.3384);
2Amplify.Geo.searchByCoordinates(position,
3 result -> {
4 for (final Place place : result.getPlaces()) {
5 Log.i("MyAmplifyApp", place.toString());
6 }
7 },
8 error -> Log.e("MyAmplifyApp", "Failed to reverse geocode " + position, error)
9);
1val position = Coordinates(47.6153, -122.3384)
2Amplify.Geo.searchByCoordinates(position,
3 {
4 for (place in it.places) {
5 Log.i("MyAmplifyApp", place.toString())
6 }
7 },
8 { Log.e("MyAmplifyApp", "Failed to reverse geocode $position", it) }
9)
1val position = Coordinates(47.6153, -122.3384)
2try {
3 val result = Amplify.Geo.searchByCoordinates(position)
4 for (place in result.places) {
5 Log.i("MyAmplifyApp", place.toString())
6 }
7} catch (error: GeoException) {
8 Log.e("MyAmplifyApp", "Failed to reverse geocode $position", error)
9}
1Coordinates position = new Coordinates(47.6153, -122.3384);
2RxAmplify.Geo.searchByCoordinates(position).subscribe(
3 result -> {
4 for (final Place place : result.getPlaces()) {
5 Log.i("MyAmplifyApp", place.toString());
6 }
7 },
8 error -> Log.e("MyAmplifyApp", "Failed to reverse geocode " + position, error)
9);

Restrict your search results by specifying following parameters inside GeoSearchByCoordinatesOptions:

  • maxResults - to limit the maximum result set (defaults to 50)
1GeoSearchByCoordinatesOptions options = GeoSearchByCoordinatesOptions.builder()
2 .maxResults(1)
3 .build();
1val options = GeoSearchByCoordinatesOptions.builder()
2 .maxResults(1)
3 .build()
1val options = GeoSearchByCoordinatesOptions.builder()
2 .maxResults(1)
3 .build()
1GeoSearchByCoordinatesOptions options = GeoSearchByCoordinatesOptions.builder()
2 .maxResults(1)
3 .build();