获取 iPhone 纬度和经度
Obtaining iPhone Latitude & Longitude
我一直在尝试检索 iPhone 的纬度和经度,以便传递给外部函数以便对某些内容进行地理标记。但是,我一直很不成功。这是我现在正在使用的代码。
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.locationManager.requestAlwaysAuthorization()
self.locationManager.requestWhenInUseAuthorization()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func findMyLocation (sender:AnyObject)
{
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
{
CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error)->Void in
if error == nil
{
println("Reverse geocoder failed with error " + error.localizedDescription)
return
}
if placemarks.count > 0
{
let pm = placemarks[0] as CLPlacemark
self.displayLocationInfo(pm)
}
else
{
println("Problem with the data received from geocoder")
}
})
}
func displayLocationInfo(placemark: CLPlacemark) {
//stop updating location to save battery life
locationManager.stopUpdatingLocation()
if (placemark.postalCode != nil)
{
println(placemark.postalCode)
println("just tried to print placemark's postal code")
}
//println(placemark.locality ? placemark.locality : "")
//println(placemark.postalCode ? placemark.postalCode : "")
//println(placemark.administrativeArea ? placemark.administrativeArea : "")
//println(placemark.country ? placemark.country : "")
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!)
{
println("Error while updating location " + error.localizedDescription)
}
截至目前,当我 运行 程序时,我几乎一无所获。我有一个小按钮,上面写着 "Find Me",单击后,输出框中没有弹出任何内容。我将 iOS 模拟器的调试位置设置为 "Apple",并且我之前尝试在尝试 运行 程序时始终在模拟器的设置中启用位置服务(尽管目前它没有显示我的应用程序和这样做的选项)。
我真的只是想获得经纬度的双倍值,如果有一个简单的东西就太好了。
您应该只请求一种类型的授权。选择对您的应用的用户体验最有意义的一个。
您可能缺少您的目的字符串,现在需要它来激活定位服务。将以下键之一添加到您的 Info.plist:
NSLocationAlwaysUsageDescription
- 如果请求始终权限
NSLocationWhenInUseUsageDescription
- 如果请求 WhenInUse 权限
密钥的值应该是一个字符串,用于解释为什么需要位置权限。
我一直在尝试检索 iPhone 的纬度和经度,以便传递给外部函数以便对某些内容进行地理标记。但是,我一直很不成功。这是我现在正在使用的代码。
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.locationManager.requestAlwaysAuthorization()
self.locationManager.requestWhenInUseAuthorization()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func findMyLocation (sender:AnyObject)
{
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
{
CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error)->Void in
if error == nil
{
println("Reverse geocoder failed with error " + error.localizedDescription)
return
}
if placemarks.count > 0
{
let pm = placemarks[0] as CLPlacemark
self.displayLocationInfo(pm)
}
else
{
println("Problem with the data received from geocoder")
}
})
}
func displayLocationInfo(placemark: CLPlacemark) {
//stop updating location to save battery life
locationManager.stopUpdatingLocation()
if (placemark.postalCode != nil)
{
println(placemark.postalCode)
println("just tried to print placemark's postal code")
}
//println(placemark.locality ? placemark.locality : "")
//println(placemark.postalCode ? placemark.postalCode : "")
//println(placemark.administrativeArea ? placemark.administrativeArea : "")
//println(placemark.country ? placemark.country : "")
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!)
{
println("Error while updating location " + error.localizedDescription)
}
截至目前,当我 运行 程序时,我几乎一无所获。我有一个小按钮,上面写着 "Find Me",单击后,输出框中没有弹出任何内容。我将 iOS 模拟器的调试位置设置为 "Apple",并且我之前尝试在尝试 运行 程序时始终在模拟器的设置中启用位置服务(尽管目前它没有显示我的应用程序和这样做的选项)。 我真的只是想获得经纬度的双倍值,如果有一个简单的东西就太好了。
您应该只请求一种类型的授权。选择对您的应用的用户体验最有意义的一个。
您可能缺少您的目的字符串,现在需要它来激活定位服务。将以下键之一添加到您的 Info.plist:
NSLocationAlwaysUsageDescription
- 如果请求始终权限NSLocationWhenInUseUsageDescription
- 如果请求 WhenInUse 权限
密钥的值应该是一个字符串,用于解释为什么需要位置权限。