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.
import android.util.Log;import com.amplifyframework.core.Amplify;import com.amplifyframework.geo.models.Place;String searchQuery = "Amazon Go";Amplify.Geo.searchByText(searchQuery, result -> { for (final Place place : result.getPlaces()) { Log.i("MyAmplifyApp", place.toString()); } }, error -> Log.e("MyAmplifyApp", "Failed to search for " + searchQuery, error));import android.util.Logimport com.amplifyframework.core.Amplifyval searchQuery = "Amazon Go"Amplify.Geo.searchByText(searchQuery, { for (place in it.places) { Log.i("MyAmplifyApp", place.toString()) } }, { Log.e("MyAmplifyApp", "Failed to search for $searchQuery", it) })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)searchAreanear- to act as the search origination locationwithin- to limit the area to search inside of
import com.amplifyframework.geo.models.Coordinates;import com.amplifyframework.geo.models.CountryCode;import com.amplifyframework.geo.models.SearchArea;import com.amplifyframework.geo.options.GeoSearchByTextOptions;import java.util.Collections;Coordinates position = new Coordinates(47.6153, -122.3384);GeoSearchByTextOptions options = GeoSearchByTextOptions.builder() .maxResults(10) .searchArea(SearchArea.near(position)) .countries(Collections.singletonList(CountryCode.USA)) .build();import com.amplifyframework.geo.models.Coordinatesimport com.amplifyframework.geo.models.CountryCodeimport com.amplifyframework.geo.models.SearchAreaimport com.amplifyframework.geo.options.GeoSearchByTextOptionsval position = Coordinates(47.6153, -122.3384)val options = GeoSearchByTextOptions.builder() .maxResults(10) .searchArea(SearchArea.near(position)) .countries(listOf(CountryCode.USA)) .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.
import android.util.Log;import com.amplifyframework.core.Amplify;import com.amplifyframework.geo.models.Coordinates;import com.amplifyframework.geo.models.Place;Coordinates position = new Coordinates(47.6153, -122.3384);Amplify.Geo.searchByCoordinates(position, result -> { for (final Place place : result.getPlaces()) { Log.i("MyAmplifyApp", place.toString()); } }, error -> Log.e("MyAmplifyApp", "Failed to reverse geocode " + position, error));import android.util.Logimport com.amplifyframework.core.Amplifyimport com.amplifyframework.geo.models.Coordinatesval position = Coordinates(47.6153, -122.3384)Amplify.Geo.searchByCoordinates(position, { for (place in it.places) { Log.i("MyAmplifyApp", place.toString()) } }, { Log.e("MyAmplifyApp", "Failed to reverse geocode $position", it) })Restrict your search results by specifying following parameters inside GeoSearchByCoordinatesOptions:
maxResults- to limit the maximum result set (defaults to 50)
import com.amplifyframework.geo.options.GeoSearchByCoordinatesOptions;GeoSearchByCoordinatesOptions options = GeoSearchByCoordinatesOptions.builder() .maxResults(1) .build();import com.amplifyframework.geo.options.GeoSearchByCoordinatesOptionsval options = GeoSearchByCoordinatesOptions.builder() .maxResults(1) .build()