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);
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 locationwithin
- 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();
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);
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();