Saj*_*jal 40 android google-maps latitude-longitude google-places-api google-maps-android-api-2
我正在使用谷歌自动填充地点api搜索我的应用程序中的位置,现在我想得到我搜索过的地方的纬度和经度.如何从Android中的谷歌自动完成地点api返回的结果获取经度和经度?
小智 44
以下使用Google Places API for android的代码段为我工作
Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
if (places.getStatus().isSuccess()) {
final Place myPlace = places.get(0);
LatLng queriedLocation = myPlace.getLatLng();
Log.v("Latitude is", "" + queriedLocation.latitude);
Log.v("Longitude is", "" + queriedLocation.longitude);
}
places.release();
}
});
Run Code Online (Sandbox Code Playgroud)
访问Google Places API for Android,获取从某个地方检索数据的完整方法列表
Cal*_*aNN 28
Google Place详细信息就是答案.
从place_id你有,查询详细地点类似https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key},你可以得到的lat,并lng从result.geometry.locationJSON.
小智 8
请提供 Place.Field.LAT_LNG 以获取该地点的纬度和经度。
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID,
Place.Field.NAME,Place.Field.LAT_LNG));
Run Code Online (Sandbox Code Playgroud)
然后得到 LatLng
LatLng destinationLatLng = place.getLatLng();
Run Code Online (Sandbox Code Playgroud)
并且可以看透吐司
destlat = destinationLatLng.latitude;
destLon = destinationLatLng.longitude;
Toast.makeText(getApplicationContext(), "" + destlat + ',' + destLon, Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
基于最新版本的 AutoComplete 文档
选项 1:嵌入 AutocompleteSupportFragment
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);
autocompleteFragment
.setPlaceFields(Arrays.asList(Place.Field.ID,
Place.Field.NAME,Place.Field.LAT_LNG,Place.Field.ADDRESS));
Run Code Online (Sandbox Code Playgroud)
选项 2:使用意图启动自动完成活动
List<Place.Field> fields = Arrays.asList(Place.Field.ID, Place.Field.NAME,Place.Field.LAT_LNG,Place.Field.ADDRESS);
// Start the autocomplete intent.
Intent intent = new Autocomplete.IntentBuilder(
AutocompleteActivityMode.FULLSCREEN, fields)
.build(this);
startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
无论您对哪个领域感兴趣,都必须如上所述提及。
你会得到如下结果:
onPlaceSelected:
{
"a":"#90, 1st Floor, Balaji Complex, Kuvempu Main Road, Kempapura, Hebbal
Kempapura, Bengaluru, Karnataka 560024, India",
"b":[],
"c":"ChIJzxEsY4QXrjsRQiF5LWRnVoc",
"d":{"latitude":13.0498176,"longitude":77.600347},
"e":"CRAWLINK Networks Pvt. Ltd."
}
Run Code Online (Sandbox Code Playgroud)
注:显示的结果是将Place对象解析为json
在这个地方,自动完成响应返回的每个地方都有一个ID和一个参考字符串作为解释在这里.
使用任何一个(最好在弃用引用时为Id)来查询Places API以获取有关该地点的完整信息(包括lat/lng):https: //developers.google.com/places/documentation/details#PlaceDetailsRequests
关于shyam的评论 - 只有在自动完成响应中有完整地址时,地理编码才有效,但情况并非总是如此.此外,地理编码还会列出可能的结果,因为您在自动填充响应中获得的地点描述不是唯一的.根据您的需要,地理编码可能就足够了.
小智 5
在函数下添加这些行
autocomplete.addListener('place_changed', function() {});
var place = autocomplete.getPlace();
autocomplete.setFields(['place_id', 'geometry', 'name', 'formatted_address']);
var lng = place.geometry.location.lng();
var lat = place.geometry.location.lat();
var latlng = {lat , lng};
console.log(latlng);
Run Code Online (Sandbox Code Playgroud)