iOS定位获取城市名
2016-07-16 17:30
393 查看
在项目中经常需要获取用户的位置信息,这就涉及到了定位,这里举个简单的例子——定位获取城市名,来归纳coreLocation的一些基本用法。
1.在iOS中如果需要使用定位服务,需要导入定位的框架
定位主要用到一个CLLocationManager对象及它的代理方法,所以在需要的地方设置一个manager对象,并设置其代理,要继承CLLocationManagerDelegate协议.实现代理方法。
3.iOS6以上,苹果对用户的隐私做了加强,所有的定位操作需要得到用户的允许。
所以我们在使用前,需要判断是否得到用户允许
4.通过相关的代理方法获取经纬度,进而转为城市名
- (void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations
{
CLLocation *loc = [locations firstObject];
// 获取当前所在的城市名
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
//根据经纬度反向地理编译出地址信息
[geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *array, NSError *error)
{
if (array.count > 0)
{
CLPlacemark *placemark = [array objectAtIndex:0];
//NSLog(@%@,placemark.name);//具体位置
//获取城市
NSString *city = placemark.locality;
if (!city) {
//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
city = placemark.administrativeArea;
}
cityName = city;
[self loadWeather:city];
NSLog(@”定位完成:%@”,cityName);
}
5.定位失败后也需要关闭定位
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error {
[manager stopUpdatingLocation];
}
注意
1.iOS8对定位进行了一些修改,其中包括定位授权的方法,CLLocationManager增加了下面的两个方法:
(1)始终允许访问位置信息
(void)requestAlwaysAuthorization;
(2)使用应用程序期间允许访问位置数据
(void)requestWhenInUseAuthorization;
2、在Info.plist文件中添加如下配置:
(1)NSLocationAlwaysUsageDescription
(2)NSLocationWhenInUseUsageDescription
到这里基本的定位城市是可以实现的了。
1.在iOS中如果需要使用定位服务,需要导入定位的框架
定位主要用到一个CLLocationManager对象及它的代理方法,所以在需要的地方设置一个manager对象,并设置其代理,要继承CLLocationManagerDelegate协议.实现代理方法。
3.iOS6以上,苹果对用户的隐私做了加强,所有的定位操作需要得到用户的允许。
所以我们在使用前,需要判断是否得到用户允许
4.通过相关的代理方法获取经纬度,进而转为城市名
- (void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations
{
CLLocation *loc = [locations firstObject];
// 获取当前所在的城市名
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
//根据经纬度反向地理编译出地址信息
[geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *array, NSError *error)
{
if (array.count > 0)
{
CLPlacemark *placemark = [array objectAtIndex:0];
//NSLog(@%@,placemark.name);//具体位置
//获取城市
NSString *city = placemark.locality;
if (!city) {
//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
city = placemark.administrativeArea;
}
cityName = city;
[self loadWeather:city];
NSLog(@”定位完成:%@”,cityName);
}else if (error == nil && [array count] == 0) { NSLog(@"No results were returned."); }else if (error != nil) { NSLog(@"An error occurred = %@", error); } //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新 [manager stopUpdatingLocation]; }];
}
5.定位失败后也需要关闭定位
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error {
[manager stopUpdatingLocation];
}
注意
1.iOS8对定位进行了一些修改,其中包括定位授权的方法,CLLocationManager增加了下面的两个方法:
(1)始终允许访问位置信息
(void)requestAlwaysAuthorization;
(2)使用应用程序期间允许访问位置数据
(void)requestWhenInUseAuthorization;
2、在Info.plist文件中添加如下配置:
(1)NSLocationAlwaysUsageDescription
(2)NSLocationWhenInUseUsageDescription
到这里基本的定位城市是可以实现的了。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- CSS浮动和定位学习笔记
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- C#实现txt定位指定行完整实例
- 百度地图经纬度转换到腾讯地图/Google 对应的经纬度
- js 获取经纬度的实现方法
- Flex中怎么给表格中的滚动条定位避免刷新回到原处
- JavaScript实现点击文本自动定位到下拉框选中操作
- 一个JavaScript操作元素定位元素的实例
- PHP根据两点间的经纬度计算距离
- C#通过经纬度计算2个点之间距离的实现代码
- js中的如何定位固定层的位置
- MYSQL 关于两个经纬度之间的距离由近及远排序
- JS弹出层单纯的绝对定位居中示例代码
- 讲解iOS开发中基本的定位功能实现