我使用 Google Maps API ,需要使用lat和lon获取该地点的详细信息。
我试图通过Geocoder,但Class" 地址"没有 参数 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
}
答案 0 :(得分:0)
<强> FYI 强>
Geocoder
未提供 getPlaceID()
。
提供placeId以查找给定地点ID的地址。这个地方 ID是可与其他Google API一起使用的唯一标识符
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;
}
答案 1 :(得分:0)
你可以在标记的基础上获得位置Id。像这样的东西:
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
,请点击以下链接:
How to get place or placeid by latLng in android using google places api?
答案 2 :(得分:0)
要从坐标获取地点ID,您应该使用REST API执行reverse geocoding查找。
原生Android API地理编码器不支持在getFromLocation()
结果中获取地点ID。不幸的是,谷歌地图Android SDK既不提供内置的Geocoder。功能请求存在很长时间,但看起来它没有高优先级:
https://issuetracker.google.com/issues/35823852
因此,要获得地点ID,您必须坚持使用REST API。您可以在github上找到适用于Google Maps API Web服务的Java客户端库:
https://github.com/googlemaps/google-maps-services-java
您可以使用此库从Java代码中调用Geocoding API。
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密钥必须与您在Google Maps Android SDK中使用的API密钥不同,因为网络服务不支持Android应用限制。
还要考虑图书馆文档中的这一重要说明
Google Maps Services的Java客户端旨在用于服务器应用程序。此库不适用于Android应用内部,因为可能会丢失API密钥。
如果您要构建移动应用程序,则需要引入代理服务器作为移动应用程序和Google Maps API Web服务之间的中介。 Google Maps Services的Java客户端将成为这种代理服务器的基础。
我希望这有帮助!
答案 3 :(得分:-1)
尝试这个
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