调用MKLocalSearch.start触发MKErrorDomain错误,求排查原因
问题原因及解决方案
错误解析
你遇到的MKErrorDomain Code=2搭配MKErrorGEOError=-7,核心原因是搜索区域设置得过小。其中GEOError=-7对应GEODatabaseErrorRegionTooSmall,意思是你定义的搜索跨度极小,地图服务无法在如此狭窄的范围内找到匹配的POI(比如你搜索的"bar"),直接返回无结果错误。
看你的代码,MKCoordinateSpan的经纬度增量都是0.000018011,这个数值对应的实际地理范围仅约2米(纬度上1度≈111公里,0.000018度换算后约2米),这么小的区域内几乎不可能存在符合条件的商家。
修复方案
1. 调大搜索跨度
把经纬度增量改成合理的数值,根据需求调整范围,比如设置为0.01(对应约1.1公里的搜索范围):
let searchSpan = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
你可以根据实际场景调整这个值,比如需要找步行范围内的商家,用0.005(约500米)即可。
2. 灵活设置搜索规则(可选)
如果必须缩小范围,建议先放宽搜索区域获取结果,再通过MKMapItem的placemark.location计算距离,筛选出近距离的POI,而不是一开始就把区域限死到极小。
另外,如果你是要找当前位置附近的商家,也可以省略region设置,直接用自然语言查询:
searchRequest.naturalLanguageQuery = "bar near me"
系统会自动基于当前位置调整搜索范围,避免区域过小的问题。
内容的提问来源于stack exchange,提问作者BiggRojo
相关产品推荐
相关产品推荐

