【发布时间】:2012-09-26 00:14:06
【问题描述】:
我想使用我的应用用户的位置,更具体地说是纬度和经度值。
我需要它们在变量中使用,这样我就可以用 url 发送它们...
我以前从未在 iOS 和 Xcode 上使用过位置,但在 Internet 上没有找到与我的问题相符的内容...
所以我希望有人可以用代码示例向我解释一下:)
谢谢你的帮助 来自德国的劳伦兹
【问题讨论】:
标签: ios cocoa-touch geolocation location
我想使用我的应用用户的位置,更具体地说是纬度和经度值。
我需要它们在变量中使用,这样我就可以用 url 发送它们...
我以前从未在 iOS 和 Xcode 上使用过位置,但在 Internet 上没有找到与我的问题相符的内容...
所以我希望有人可以用代码示例向我解释一下:)
谢谢你的帮助 来自德国的劳伦兹
【问题讨论】:
标签: ios cocoa-touch geolocation location
您可以使用 CoreLocation 获取经度和纬度。
包含框架:
在导航器中单击您的项目。
单击“将二进制文件与库链接”下的加号按钮
将 Corelocation 添加到您的项目中。
导入头文件:
#import <CoreLocation/CoreLocation.h>
声明 CLLocationManager:
CLLocationManager *locationManager;
初始化 locationManager:
- (void)viewDidLoad
{
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
}
然后,使用
float latitude = locationManager.location.coordinate.latitude;
float longitude = locationManager.location.coordinate.longitude;
【讨论】:
第 1 步:在您的项目中添加 CoreLocation 框架。
第 2 步:在要获取位置的视图控制器的头文件中写入以下代码:
#import <CoreLocation/CoreLocation.h>
另外,在界面中添加CLLocationManagerDelegate。
现在,创建 LocationManager 的对象
CLLocationManager *locationManager;
第 3 步:在ViewDidLoad 方法中编写以下代码:
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
[locationManager requestAlwaysAuthorization]; //Note this one
您可以将所需的准确度值设置为kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters, kCLLocationAccuracyKilometer, kCLLocationAccuracyThreeKilometers
现在,编写下面的代码来获取纬度和经度值
float Lat = locationManager.location.coordinate.latitude;
float Long = locationManager.location.coordinate.longitude;
NSLog(@"Lat : %f Long : %f",Lat,Long);
第 4 步:在 iOS 8 中,此代码会静默失败,即您不会收到任何错误或警告。
你需要做两件额外的事情才能让定位工作:
以下任何一个或两个键都需要添加到 Info.plist 文件中。
这些是字符串类型,值可以是任何消息描述或空。
现在您需要为相应的定位方法请求授权。使用以下任一调用:
【讨论】:
斯威夫特:
var locationManager = CLLocationManager()
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.startUpdatingLocation()
【讨论】: