我正在尝试使用CLLocationManager返回的坐标来查看它们是否与当地的任何业务匹配-例如,如果我碰巧站在星巴克,我会希望我的应用程序根据我的坐标提示我正站在星巴克。如果我在离星巴克20米远的地方,但这是离我站的地方最近的地址,我希望它会让人联想到“星巴克”。
我可以返回CLPlacemarks,没有问题,但是它们包含的信息在任何地方都不包含企业名称。我在英国,所以,举个例子,伦敦告罗斯特路上的南多的地址是“伦敦格洛斯特路170号,伦敦,邮编: SW7 4st”。我可以返回170Gloucester Road,London,SW7 4ST在CLPlacemark信息中没有问题,但它没有提到南多的。
我在不同的帖子中看到,信息可能在name属性中,或者感兴趣的区域中,甚至在格式化地址属性中,但我在伦敦市中心的广泛测试表明,至少在英国情况并非如此。即使在美国,“苹果公司”也只是在其地址的格式化地址属性中被提及,而不是1无限循环。
为此,我尝试使用CLLocation获取用户的坐标,然后将其用作编程MapKit搜索的基础-这只是再次返回地址,而不是企业名称。
我还对苹果地图应用程序进行了一些终端用户测试,如果在本地搜索“bar”、“restaurant”等,它似乎返回了相当不完整的结果。一些本地的地方被包括在内,另一些地方不包括,有时结果包含相当远的地方,即使我知道附近有更多的餐馆。
我很快得出结论,实现我想要的唯一方法是使用Google Places API,出于一些或一些原因,我希望避免使用Google Places API,尤其是我在iOS编程方面相当缺乏经验(在Swift btw...)
如果有人可以明确地建议,在Mapkit中没有办法做到这一点,我需要使用Google Places API,那么至少我知道,并且可以继续下去-但如果有一种方法,我将非常感激知道它是什么……
提前感谢!
发布于 2016-02-23 10:15:59
我在使用MapKit时遇到过类似的问题,过了一段时间后,我发现Google places API对于这类任务来说要好得多。查看这个link,找到关于如何使用Google Places获取当前位置的示例代码
基本上,你需要
-Import谷歌地图到你的班级
import GoogleMaps
-Add a将客户端放在类上
var placesClient: GMSPlacesClient?
在你的viewDidLoad()上-Init你的places客户端()
placesClient = GMSPlacesClient()
-And将此代码添加到搜索当前位置所需的位置
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)")
}
}
})
关于似然值的注释:
该可能性提供了对于单个请求,该位置是返回位置列表中的最佳匹配的相对概率。你不能在不同的请求之间比较可能性。可能性的值将介于0和1.0之间。返回的GMSPlaceLikelihood对象数组中的似然和始终小于或等于1.0。请注意,总和不一定是1.0。例如,为了表示正确位置是位置A的55%的可能性,以及它是位置B的35%的可能性,可能性数组有两个成员:位置A的可能性为0.55,位置B的可能性为0.35。
你也有机会使用GMSPlacePicker,如果你想让你的用户有机会选择他们当前的位置,这会有很大帮助。
发布于 2016-02-27 21:18:48
对于弗朗西斯科非常有用的回答,这是我不得不对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)")
}
}
})
https://stackoverflow.com/questions/35566325
复制相似问题