我正在尝试使用使用 CLLocationManager 返回的坐标来查看它们是否与任何本地企业紧密匹配 - 例如,如果我碰巧站在星巴克,我希望我的应用程序根据我的坐标提出建议我站在星巴克里。如果我在星巴克外 20 米处,但这是距离我站立位置最近的地址,我希望它建议“星巴克”。
我可以毫无问题地返回 CLPlacemarks,但它们包含的信息不包含任何地方的公司名称。我在英国,因此,例如,伦敦格洛斯特路的 Nando's 的地址为“170 Gloucester Road, London, SW7 4ST”。我可以在 CLPlacemark 信息中返回 170 Gloucester Road, London, SW7 4ST,没有问题,但没有任何地方提到 Nando's。
我在各种帖子中读到,该信息可能在名称属性、感兴趣的区域甚至格式化的地址属性中,但我在伦敦市中心的广泛测试表明情况并非如此,无论如何在英国。即使在美国,“Apple Inc”也仅在其地址的格式化地址属性中在 1 个无限循环之前被提及。
我尝试通过使用 CLLocation 获取用户的坐标,然后将它们用作编程式 MapKit 搜索的基础来实现此目的 - 这只是再次返回地址,而不是公司名称。
还对苹果 map 应用程序进行了一些最终用户测试(我是该应用程序的忠实粉丝),如果通常在本地搜索例如 map ,它似乎会返回相当不完整的结果。 “酒吧”、“餐厅”。有些本地的地方包括在内,有些则没有,有时结果包含很远的地方,尽管我知道附近有更多的餐馆。
我很快就得出结论,实现我想要的目标的唯一方法是使用 Google Places API,出于多种原因,我希望避免使用 Google Places API,尤其是我在 iOS 编程方面(顺便说一句,在 Swift 中)相当缺乏经验。 ..)
如果有人可以明确建议在 Mapkit 中无法本地执行此操作并且我需要使用 Google Places API,那么至少我知道,并且可以继续使用它 - 但如果有办法的话,我将非常感激知道它是什么......
提前致谢!
最佳答案
除了弗朗西斯科非常有用的答案之外,这是我必须对 currentPlaceWithCallback 进行的调整 - 我删除了:GMSPlaceLikelihoodList!给出了以下错误:无法将 GMSPlaceLikelihoodList 类型的值转换为预期的参数类型....
这是更正后的代码:
placesClient!.currentPlaceWithCallback({ (placeLikelihoods, error) -> Void in
if error != nil {
print("Current Place error: \(error!.localizedDescription)")
return
}
for likelihood in placeLikelihoods!.likelihoods {
if let likelihood = likelihood as? GMSPlaceLikelihood {
let place = likelihood.place
print("Current Place name \(place.name) at likelihood \(likelihood.likelihood)")
print("Current Place address \(place.formattedAddress)")
print("Current Place attributions \(place.attributions)")
print("Current PlaceID \(place.placeID)")
}
}
})
关于ios - 使用 CLLocation 和/或 Mapkit 从坐标查找企业名称信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566325/