Я использую Google Maps API, и мне нужно получить подробную информацию о месте, используя широту и долготу.
I've tried to get via Geocoder, but Class "Address" has no parameters PLACE_ID
Geocoder gcd = new Geocoder(getApplicationContext(), Locale.getDefault());
List<Address> addresses = null;
try {
addresses = gcd.getFromLocation(52.2641, 76.9597, 1);
} catch (IOException e) {
e.printStackTrace();
}
if (addresses.size() > 0) {
Toast.makeText(this, addresses.get(0).getPlaceID(), Toast.LENGTH_SHORT).show();
}
else {
// do your stuff
}
вы также можете использовать API мест Google, он возвращает объект места, в котором есть вся информация о нем. И кроме того, если вы хотите получить идентификатор, вы можете получить его из информации о маркере.
Прочитать developers.google.com/places/place-id




К вашему сведению
Geocoder не предоставил getPlaceID().
Supply a placeId to find the address for a given place ID. The place ID is a unique identifier that can be used with other Google APIs
Литерал объекта GeocoderRequest содержит следующие поля:
{
address: string,
location: LatLng,
placeId: string,
bounds: LatLngBounds,
componentRestrictions: GeocoderComponentRestrictions,
region: string
}
Вам следует прочитать Retrieving an Address for a Place ID.
/**
* Requests the details of a Place.
*
* <p>We are only enabling looking up Places by placeId as the older Place identifier, reference,
* is deprecated. Please see the <a
* href = "https://web.archive.org/web/20170521070241/https://developers.google.com/places/web-service/details#deprecation">
* deprecation warning</a>.
*
* @param context The context on which to make Geo API requests.
* @param placeId The PlaceID to request details on.
* @return Returns a PlaceDetailsRequest that you can configure and execute.
*/
public static PlaceDetailsRequest placeDetails(GeoApiContext context, String placeId) {
PlaceDetailsRequest request = new PlaceDetailsRequest(context);
request.placeId(placeId);
return request;
}
Попробуй это
Geocoder geocoder;
List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(latitude, longitude, 1);
// Here 1 represent max location result to returned, by documents it recommended 1 to 5
String address = addresses.get(0).getAddressLine(0);
// If any additional address line present than only, check with max
available address lines by getMaxAddressLineIndex()
String city = addresses.get(0).getLocality();
String state = addresses.get(0).getAdminArea();
String country = addresses.get(0).getCountryName();
String postalCode = addresses.get(0).getPostalCode();
String knownName = addresses.get(0).getFeatureName();
// Only if available else return NULL
Он не возвращает идентификатор места.
вы можете получить идентификатор места на основании маркера. что-то вроде этого:
mGoogleMap.setOnPoiClickListener(new GoogleMap.OnPoiClickListener() {
@Override
public void onPoiClick(PointOfInterest pointOfInterest)
{
addOrSaveMarkerToMap(pointOfInterest.latLng.latitude, pointOfInterest.latLng.longitude, pointOfInterest.name, "", pointOfInterest.placeId, true, true);
//Toast.makeText(GoogleMapsActivity.this,""+pointOfInterest.name+" (lat: "+pointOfInterest.latLng.latitude+", long: "+pointOfInterest.latLng.longitude+") " +" is added in your favorite list",Toast.LENGTH_LONG).show();
}
});
Если вы хотите узнать больше о том, что представляет собой интересный объект, перейдите по этой ссылке на документацию.
https://developers.google.com/maps/documentation/android-sdk/poi
Лучше всего использовать google places API. Это даст вам полную информацию о конкретном месте.
Если вы хотите использовать google places API, перейдите по этой ссылке:
Как получить место или placeid по latLng в Android с помощью API Google Places?
В вашем случае, как вы получили PLACE ID?
@ Mr.Chingis возьмем, к примеру, карты Google, у которых есть метод setOnPoiClickListener (), что он делает, так это дает вам информацию о месте, которая содержит идентификатор места, и рисует маркер на этом месте. Я обновил свой ответ, пожалуйста, посмотрите.
@ Mr.Chingis, пожалуйста, проверьте мой обновленный ответ. Я также добавил ссылку на документацию.
Чтобы получить идентификатор места из координаты, вы должны выполнить поиск обратное геокодирование с помощью REST API.
Собственный геокодер Android API не поддерживает получение идентификатора места в результатах getFromLocation(). К сожалению, SDK Google Maps для Android также не имеет встроенного геокодера. Запрос функции существует давно, но, похоже, у него нет высокого приоритета:
https://issuetracker.google.com/issues/35823852
Итак, чтобы получить идентификатор места, вы придерживаетесь REST API. Существует клиентская библиотека Java для веб-служб Google Maps API, которую вы можете найти на github:
https://github.com/googlemaps/google-maps-services-java
Вы можете использовать эту библиотеку для вызова API геокодирования из вашего кода Java.
GeoApiContext context = new GeoApiContext.Builder()
.apiKey("AIza...")
.build();
GeocodingResult[] results = GeocodingApi.newRequest(context)
.latlng(new LatLng(52.2641, 76.9597)).await();
System.out.println(results[0].placeId);
Обратите внимание, что ключ API для веб-служб должен отличаться от ключа API, который вы используете в SDK Google Maps для Android, поскольку веб-службы не поддерживают ограничение приложений Android.
Также примите во внимание это важное замечание из документации библиотеки.
The Java Client for Google Maps Services is designed for use in server applications. This library is not intended for use inside of an Android app, due to the potential for loss of API keys.
If you are building a mobile application, you will need to introduce a proxy server to act as intermediary between your mobile application and the Google Maps API Web Services. The Java Client for Google Maps Services would make an excellent choice as the basis for such a proxy server.
Надеюсь, это поможет!
Как вы ожидаете получить идентификатор случайной точки? Вам нужно использовать поиск, чтобы получить идентификатор.