我现在使用Google Maps SDK和适用于Android的PlacePicker SDK(iOS即将推出),使用此代码:
int REQUEST_PLACE_PICKER = 1;
PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder();
Intent intent = intentBuilder.build(getActivity());
startActivityForResult(intent, REQUEST_PLACE_PICKER);
这是我的onActivityResult重写函数:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PLACE_PICKER) {
if (resultCode == Activity.RESULT_OK) {
final Place place = PlacePicker.getPlace(getActivity(), data);
final CharSequence name = place.getName();
mLocationNameTextView.setText(name);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
这是我的允许:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
如果我使用自动完成搜索,结果很好,它获得了正确的地名(Central Park Mall)
但是,如果我使用“选择此位置”,则会输入错误的地名
地名的输出将是我选择的位置的坐标,而不是街道名称,因此,如果我为用户放置坐标将是错误的信息
是否有解决方案来获取正确的地名?应该可以,因为我从“选择此位置”按钮中找到了使用Google Maps SDK和placePicker且具有正确地名的应用。
这是示例应用程序,可以成功获取适当的地名
答案 0 :(得分:1)
总而言之,问题是当我使用PlacePicker选择随机点时,我无法获得该地点的名称吗?
答案-
这样做的原因是,谷歌为地球上的每个地方都提供了经度和纬度。所以几乎所有地方都有地址。但是当提到名字时,所有地方都没有名字。因此,当您从PlacePicker中选择一个随机点时,可能会或可能不会为其分配名称。如果它具有名称,那么place.getName()将为您提供。但是,如果它没有名称place.getName()将为您提供该位置的纬度和经度。
我还通过传递place.getId()并检索了地点的名称,使用了GeoDataClient API对此进行了验证。但它还会返回名称为该地点的名称,否则它将返回该地点的纬度和经度。
在谈到PlaceAutoComplete时,它仅显示可以通过名称搜索的地方。
答案 1 :(得分:0)
我找到了解决方案!只需检查位置类型,如果位置类型为0,则只需使用地址,因为它是从带有“选择此位置”的随机选择中放置的,并且输出是坐标
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PLACE_PICKER) {
if (resultCode == Activity.RESULT_OK) {
final Place place = PlacePicker.getPlace(getActivity(), data);
if (place.getPlaceTypes().get(0).intValue() == 0) {
mLocationNameTextView.setText(place.getAddress().toString());
} else {
mLocationNameTextView.setText(place.getName(););
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}