我现在正在使用 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" />
如果我使用自动完成搜索,结果很好,它得到了正确的地名(中央公园购物中心)
但是,如果我使用“选择此位置”,我会得到错误的地名
地名的输出将是我选择位置的坐标而不是街道名称,因此如果我为用户输入坐标,这将是错误的信息
有没有办法获得正确的地名?这应该是可能的,因为我已经找到了使用 Google Maps SDK 和 placePicker 的应用程序,并且通过“选择此位置”按钮提供了正确的地名。
这是成功获取适本地名的示例应用
最佳答案
总而言之,问题是当我使用 PlacePicker 选择一个随机点时,我无法获取该地点的名称?
回答-
原因是谷歌提供了地球上每个地方的纬度和经度。所以几乎所有的地方都有地址。但说到名字,所有的地方都没有名字。因此,当您从 PlacePicker 中选择一个随机点时,它可能会也可能不会分配名称。如果它有名称,那么 place.getName() 将为您提供名称。但如果它没有名称 place.getName() 将为您提供该地点的纬度和经度。
我还通过使用 GeoDataClient API 传递 place.getId() 并检索地点名称来验证这一点。但它也返回该地点有名称的名称,否则它返回该地点的纬度和经度。
当谈到PlaceAutoComplete时,它只显示可以通过名称搜索的地点。
关于java - 使用 Google map PlacePicker API 时,我得到了错误的地名(获取坐标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51701093/