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

使用Google Places Autocomplete SDK获取选中地点经纬度返回-180的问题

解决Google Places Autocomplete经纬度返回-180的问题

我之前也踩过一模一样的坑!你遇到的经纬度返回-180的情况,大概率是因为没有主动请求坐标字段权限导致的。Google Places SDK默认不会返回所有地点信息,像经纬度这类数据,需要你明确告诉SDK要获取它。

问题原因

当你初始化GMSAutocompleteViewController时,默认的请求字段里并不包含坐标信息,所以SDK返回的GMSPlace对象会用-180作为坐标的默认占位值——这就是为什么你能拿到地点名称,却拿不到正确经纬度的核心原因。

解决步骤

你只需要在初始化自动完成控制器时,指定需要请求的字段,把坐标字段加进去就行:

  1. 创建GMSAutocompleteFilter(可选,用来过滤地点类型)
  2. 设置placeFields属性,必须包含.coordinate字段
  3. 将配置好的参数绑定到控制器

修改后的完整代码示例

首先是初始化控制器的部分:

// 创建自动完成控制器
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self

// 1. 创建过滤器(按需设置地点类型,这里用noFilter表示不限制)
let filter = GMSAutocompleteFilter()
filter.type = .noFilter

// 2. 指定需要获取的地点字段,一定要加.coordinate!
let requiredFields: GMSPlaceField = [.name, .placeID, .coordinate, .attributions]
autocompleteController.placeFields = requiredFields

// 3. 绑定过滤器
autocompleteController.autocompleteFilter = filter

// 弹出控制器
present(autocompleteController, animated: true, completion: nil)

你的回调方法不需要修改,保持原来的逻辑即可:

func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
    print("Place name: \(String(describing: place.name))")
    print("Place ID: \(String(describing: place.placeID))")
    print("Place attributions: \(String(describing: place.attributions))")
    print("Selected Lat \(place.coordinate.latitude)")
    print("Selected Lng \(place.coordinate.longitude)")
    dismiss(animated: true, completion: nil)
}

额外排查点

如果修改后还是有问题,可以检查这几点:

  • 确认Google Cloud控制台已经启用了Places API,且你的API密钥拥有正确的调用权限
  • 检查Info.plist里是否配置了正确的GMSApiKey
  • 查看Xcode控制台有没有网络请求报错(比如API密钥无效、权限不足等)

内容的提问来源于stack exchange,提问作者Shahbaz Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:28:39