Android 如何使用GooglePlaceAPI从指定的纬度和经度获取位置地址
我正在制作一个出租车预订应用程序,比如优步, 用户拖动地图以使用pin选择其位置 我抓起那个别针的板条 这是我的代码:Android 如何使用GooglePlaceAPI从指定的纬度和经度获取位置地址,android,google-maps,google-places-api,google-maps-android-api-2,Android,Google Maps,Google Places Api,Google Maps Android Api 2,我正在制作一个出租车预订应用程序,比如优步, 用户拖动地图以使用pin选择其位置 我抓起那个别针的板条 这是我的代码: public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
pinLocation = mMap.getCameraPosition().target;
setPickupLocationPrefs(pinLocation);
}
});
//Initialize Google Play Services
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
buildGoogleApiClient();
updateLocationUI();
}
}
else {
buildGoogleApiClient();
updateLocationUI();
}
}
我想获得该pin的地址,以便向我的用户显示应用程序是否在该位置运行(就像优步一样)
如何从pin位置坐标中获取该地址?使用反向地理编码。首先从销点获取纬度和经度。最好在后台线程中处理这个问题。否则它将阻止用户界面
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = gc.getFromLocation(lat, lng, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0) {
Address address = addresses.get(0);
for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getLocality()).append("\n");
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName());
}
String Address=sb.toString());
}catch(Exception E);
以下是在您的UIActivity/Fragment
中对该地理编码器过程的调用:
getAddressFromLocation(PinPointLocation, mContext, new GeocoderHandler());
以及Activity/Fragment
中的处理程序类,以在UI中显示结果:
private class GeocoderHandler extends Handler {
@Override
public void handleMessage(Message message) {
String result;
switch (message.what) {
case 1:
Bundle bundle = message.getData();
result = bundle.getString("address");
break;
default:
result = null;
}
// replace by what you need to do
myLabel.setText(result);
}
}
private class GeocoderHandler extends Handler {
@Override
public void handleMessage(Message message) {
String result;
switch (message.what) {
case 1:
Bundle bundle = message.getData();
result = bundle.getString("address");
break;
default:
result = null;
}
// replace by what you need to do
myLabel.setText(result);
}
}