ArcGIS LocatorTask与REST调用返回结果不一致问题排查求助
如何查看ArcGIS iOS SDK地理编码的实际请求URL
我来帮你排查这个结果不一致的问题——要搞清楚iOS SDK到底发了什么请求到服务器,有几个简单有效的方法,能直接定位差异点:
1. 用抓包工具直接捕获请求
这是最直观的方式,比如用Charles或Fiddler:
- 把你的iOS设备代理设置为电脑的IP和抓包工具的端口
- 在iOS设备上安装抓包工具的根证书(否则无法抓取HTTPS请求)
- 运行APP触发地理编码请求,在抓包工具里过滤
GeocodeServer相关请求,就能看到完整的URL和所有携带的参数
这里要重点提醒:你代码里用的geocode(withSearchText:)方法,调用的是findAddressCandidates端点,而你手动测试的是suggest端点——这两个接口的定位完全不同:suggest是输入联想提示,返回精简的候选词;findAddressCandidates是完整地理编码匹配,返回带坐标的地址结果,这很可能就是结果数量差异的核心原因!
2. 开启ArcGIS SDK的调试日志
ArcGIS Runtime SDK自带详细日志功能,开启后就能在Xcode控制台看到所有网络请求的URL:
// 在APP启动时添加这段代码 AGSLog.shared.level = .debug AGSLog.shared.messageFilter = .all
触发请求后,查看控制台日志,你会找到类似这样的请求URL:
https://my-server/services/GeocodeServer/findAddressCandidates?f=json&SingleLine=SomeStreet&maxResults=5&countryCode=DE&outSR=4326&returnAttributes=*
把这个URL和你手动的suggest请求对比,就能清晰看到参数和端点的差异。
3. 根据代码参数手动推测请求
根据你设置的AGSGeocodeParameters,可以大致还原SDK生成的请求:
- 端点:
findAddressCandidates(而非你手动调用的suggest) - 核心参数:
SingleLine:对应你的searchQuery内容maxResults:你设置的payload.maxSuggestions数值countryCode=DEoutSR=4326(对应.wgs84()空间参考)returnAttributes=*(对应resultAttributeNames = ["*"])
你可以手动构造这个findAddressCandidates请求测试,对比结果就能确认是不是端点不同导致的差异。
内容的提问来源于stack exchange,提问作者JulianLenz
相关产品推荐
相关产品推荐

