You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Places Autocomplete中place.getLatLng()返回null问题求助

解决Autocomplete获取Place后getLatLng()返回null的问题

嗨,作为刚接触Google Maps/Places API的新手,这个问题其实很常见——我当初也踩过一模一样的坑!问题的核心是:你在发起Autocomplete请求时,没有明确要求获取经纬度(LatLng)字段。

为什么会出现这个情况?

Google Places Autocomplete的默认行为是只返回最基础的地点信息(比如名称、ID),像经纬度这类更详细的字段,需要你在请求时主动声明要获取,否则返回的Place对象里就不会包含这些数据,调用getLatLng()自然就会返回null了,而getName()能正常工作是因为名称属于默认返回的基础字段。

具体解决步骤

  1. 定义需要获取的字段列表
    在启动Autocomplete之前,先声明你需要从Place对象中拿到哪些数据,一定要包含Place.Field.LAT_LNG:

    // 导入必要的包:import com.google.android.libraries.places.api.model.Place;
    List<Place.Field> requiredFields = Arrays.asList(
        Place.Field.NAME,
        Place.Field.ID,
        Place.Field.LAT_LNG  // 关键:添加这个字段才能获取经纬度
    );
    
  2. 用字段列表构建Autocomplete Intent
    启动AutocompleteActivity的时候,把上面定义的字段列表传给IntentBuilder:

    Intent autocompleteIntent = new Autocomplete.IntentBuilder(
        AutocompleteActivityMode.OVERLAY,  // 根据你的需求选择合适的模式
        requiredFields
    ).build(this);
    startActivityForResult(autocompleteIntent, AUTOCOMPLETE_REQUEST_CODE_FROM);
    
  3. 修改后的onActivityResult代码(验证)
    现在你的原有onActivityResult代码不需要大改,只要确保字段请求正确,place.getLatLng()就能正常返回值了:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data); // 别忘了调用父类方法!
        if (requestCode == AUTOCOMPLETE_REQUEST_CODE_FROM) {
            if (resultCode == RESULT_OK) {
                Place place = Autocomplete.getPlaceFromIntent(data);
                Log.i("shipadd", "Place: " + place.getName() + ", " + place.getId());
                from_edit_txt.setText(place.getName());
                origin = place.getLatLng();
                Log.e("origin_destarray", "获取到的经纬度:" + origin); // 现在这里应该能打印出正常的LatLng了
            } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
                Status status = Autocomplete.getStatusFromIntent(data);
                Log.i("shipadd", status.getStatusMessage());
            } else if (resultCode == RESULT_CANCELED) {
                // 用户取消操作
            }
        } else if (requestCode == AUTOCOMPLETE_REQUEST_CODE_TO) {
            if (resultCode == RESULT_OK) {
                Place place = Autocomplete.getPlaceFromIntent(data);
                Log.i("shipadd", "Place: " + place.getAddress() + ", " + place.getId());
                to_edit_txt.setText(place.getName());
                // 如果这里也需要经纬度,同样要在启动To的Autocomplete时添加LAT_LNG字段
            }
        }
    }
    

额外提示

如果你还需要其他地点信息(比如完整地址、联系方式),只需要把对应的Place.Field加到字段列表里就行,比如Place.Field.ADDRESS、Place.Field.PHONE_NUMBER等。

内容的提问来源于stack exchange,提问作者Aryan Soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:45:33