为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Google Maps PlacePicker API 时我得到了错误的地名(得到了坐标)

使用 Google Maps PlacePicker API 时我得到了错误的地名(得到了坐标)

心有法竹 2021-06-17 18:53:47
我现在正在使用 Google Maps SDK 和 PlacePicker SDK for android(iOS 即将推出),使用以下代码:int REQUEST_PLACE_PICKER = 1;PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder();                    Intent intent = intentBuilder.build(getActivity());startActivityForResult(intent, REQUEST_PLACE_PICKER);这是我的 onActivityResult 覆盖函数:@Overridepublic 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" />如果我使用自动完成搜索,结果很好,它得到了正确的地名(中央公园购物中心)但是,如果我使用 Select this location,我得到了错误的地名
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

总而言之,问题是当我使用 PlacePicker 选择一个随机点时,我无法获得该地点的名称?

回答 -

这样做的原因是谷歌提供了地球上每个地方的纬度和经度。所以几乎所有地方都有地址。但说到名字,所有的地方都没有名字。因此,当您从 PlacePicker 中选择一个随机点时,它可能会或可能不会为其分配名称。如果它有名称,则 place.getName() 将为您提供。但如果它没有名称 place.getName() 将为您提供该地点的纬度和经度。

此外,我通过传递 place.getId() 并检索地点名称,使用 GeoDataClient API 验证了这一点。但它也返回那个地方有名字的名字,否则它返回那个地方的纬度和经度。

而当涉及到 PlaceAutoComplete 时,它只显示可以通过名称搜索的地方。


查看完整回答
反对 回复 2021-06-30
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

我得到了解决方案!只需检查地点类型,如果地点类型为 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);

}


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信