使用 CoreLocation 获取最近的位置
Posted
技术标签:
【中文标题】使用 CoreLocation 获取最近的位置【英文标题】:Get closest locations with CoreLocation 【发布时间】:2017-12-22 13:31:36 【问题描述】:我如何才能像 Instagram 一样在发布任何项目之前获取我当前位置的最近位置?我使用 CoreLocation 通过以下代码查找我的当前位置。现在我如何使用这个 CLLocation 信息类来获取最近的位置?或者我还需要哪些其他选项来实现此功能?任何建议都会非常有帮助。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: (placemarks, error) -> Void in
if (error != nil)
print("LoginView locationManager Error: \(error!.localizedDescription)");
return
if (placemarks!.count > 0)
let placemark = placemarks?[0]
let latitude = String(format: "%f", (placemark?.location?.coordinate.latitude)!)
let longitude = String(format: "%f", (placemark?.location?.coordinate.longitude)!)
guard let local = placemark?.locality else return
let uLocation = UserLocation(locality: local, longitude: longitude, latitude: latitude)
self.userLocations.append(uLocation)
self.locationContainer.setupData(locations: self.userLocations, delegate: self)
self.locationManager.stopUpdatingLocation()
)
locationManager.stopUpdatingLocation()
更新:我决定为此使用适用于 ios 的 Google Places SDK https://developers.google.com/places/ios-sdk/intro。它提供了比 CLLocation 更灵活、更可靠的解决方案。
【问题讨论】:
在询问任何任务之前,您需要进行适当的研发。顺便说一句,您可以通过 google place api 来完成。 【参考方案1】:func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: (placemarks, error) -> Void in
if (error != nil)
print("LoginView locationManager Error: \(error!.localizedDescription)");
return
if (placemarks!.count > 0)
let placemark = placemarks?[0]
let latitude = String(format: "%f", (placemark?.location?.coordinate.latitude)!)
let longitude = String(format: "%f", (placemark?.location?.coordinate.longitude)!)
self.addressDecoder.reverseGeocodeLocation(manager.location!, completionHandler:
[unowned self] (result, error) in
guard let address = result else return
let nearbyName = address[0].name ?? address[0].locality
let uLocation = UserLocation(locality: local, longitude: longitude, latitude: latitude)
self.userLocations.append(uLocation)
)
let uLocation = UserLocation(locality: local, longitude: longitude, latitude: latitude)
self.userLocations.append(uLocation)
self.locationContainer.setupData(locations: self.userLocations, delegate: self)
self.locationManager.stopUpdatingLocation()
else
)
locationManager.stopUpdatingLocation()
我使用 ??
以防找不到地址,然后使用 locality,就像你现在拥有的一样。使用完成块内的result
来检查可用的其他选项,以防其中一个对您有吸引力。
问候。
【讨论】:
@umutg4d 你试过这个吗? ??以上是关于使用 CoreLocation 获取最近的位置的主要内容,如果未能解决你的问题,请参考以下文章
使用 CoreLocation CLLocationManager 获取过去的位置
iOS项目开发实战——使用CoreLocation获取当前位置信息
是否可以在不使用 CoreLocation 的情况下在 IOS 中获取位置?我们可以使用网络提供商获取它吗?