美文网首页
通过GPS数据反向地理信息编码得到当前位置信息

通过GPS数据反向地理信息编码得到当前位置信息

作者: walkerwzy | 来源:发表于2017-09-07 10:01 被阅读98次

检查可用性

这属于基础知识, 不赘述, 总的来说,你的设备的支持要打开, 添加CoreLocation的framework, 引用头文件, 添加委托,然后, 好的实践是在使用前编程检查相关可用性:

- (CLLocationManager *)locationManager
{
    if(!_locationManager){
        if([CLLocationManager locationServicesEnabled]){
            _locationManager = [[CLLocationManager alloc] init];
            _locationManager.delegate = self;
            _locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
            CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
            if (status == kCLAuthorizationStatusNotDetermined) {
                NSLog(@" not determined");
                if([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
                    [_locationManager requestAlwaysAuthorization];
                }
            }else if (status == kCLAuthorizationStatusDenied) {
                NSLog(@"denied");
            }else if (status == kCLAuthorizationStatusRestricted) {
                NSLog(@"restricted");
            }else if (status == kCLAuthorizationStatusAuthorizedAlways) {
                NSLog(@"always allowed");
            }else if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
                NSLog(@"when in use allowed");
            }else{
            }
        }else _locationManager = nil;
    }
    return _locationManager;
}

注意kCLAuthorizationStatusNotDetermined状态, iOS8以后, 需要手动编辑info.plist文件, 添加两个请求用户授权时的文案, 才能正常使用, 这里觉得匪夷所思:

<key>NSLocationWhenInUseUsageDescription</key><string>请授权使用地理位置服务</string>
<key>NSLocationAlwaysUsageDescription</key><string>请授权使用地理位置服务</string>

以上, 可随便参考网上任何一篇教程

请求地理位置并反向编码

这里需要注意的是, 苹果的CLGeocoder API并不允许你频繁调用, 一分钟一次为宜, 所以你千万不要[self.locationManager startUpdatingLocation], 然后在locationManager:didChangeAuthorizationStatus:
方法里去decode, 因为只是为了获取城市, 精度要求不高, 并且不需要持续更新, 所以我们就不update了, 只request一次, 然后在获取位置失败的时候再手动request一次:

+ (void)locationManager:(nonnull CLLocationManager *)manager didFailWithError:(nonnull NSError *)error{
    NSLog(@"fail with error:\n %@", error);
    [self.locationManager requestLocation];
}

相关解释参考这篇文章

语言的问题

因为习惯用英文系统, 就碰到请求回来的信息是英文的原因, 这里苹果是固化起来的, 暂时不支持用参数来指定返回数据的显示语言, 借鉴这篇文章的思路, 在请求前把当前语言设置保存起来, 临时改成中文, 请求结束后再修改回来:

+ (void)locationManager:(nonnull CLLocationManager *)manager didUpdateLocations:(nonnull NSArray *)locations{
    CLLocation *location = [locations lastObject];
    CLGeocoder *geocoder = [CLGeocoder new];
    // 修改语言为中文
    NSArray *currentLanguageArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"zh_Hans", nil] forKey:@"AppleLanguages"];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * __nullable placemarks, NSError * __nullable error) {
        // 恢复语言
        [[NSUserDefaults standardUserDefaults] setObject:currentLanguageArray forKey:@"AppleLanguages"];
        if(error){
            NSLog(@"reverse error:%@", [error localizedDescription]);
        }else{
            if([placemarks count] > 0){
                CLPlacemark *mark = [placemarks firstObject];
                NSLog(@"%@", mark);
                NSLog(@"城市名:%@", mark.locality);
            }
        }
    }];
}

相关文章

  • 通过GPS数据反向地理信息编码得到当前位置信息

    检查可用性 这属于基础知识, 不赘述, 总的来说,你的设备的支持要打开, 添加CoreLocation的frame...

  • 使用CoreLocation获取地理位置

    在手机上获取的地理位置信息分为两类: 当前位置的经纬度信息 当前位置根据经纬度逆编码后的地理名称 一、概述 通过C...

  • 车联网系统有什么功能

    车联网系统就是通过互联网、GPS定位系统、地理信息、移动通信系统与各种传感设备终端结合起来,将数据上传至车辆智能化...

  • Arduino mega 2560 使用多个串口遇到的问题

    使用mega接收GPS模块数据,通过zigbee模块发送自身位置并接收其他设备发送的位置信息。 如使用两个软件串口...

  • GPS定位基本原理

    GPS定位,实际上就是通过四颗已知位置的卫星来确定GPS接收器的位置。 如上图所示,图中的GPS接收器为当前要确定...

  • 玩转数据分析 地图的妙用

    第五章地图妙用 5.1 位置图 在做数据分析的时候,我们经常会遇到一些地理信息,如何有效的利用地理信息进行分析,是...

  • 定位

    手机有一个功能。定位。 无论是通过北斗,GPS,还是WiFi,数据网络,都能获取到当前所在位置。 手机上很多APP...

  • 平衡小车制作——PID

    位置闭环控制 位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,得到控制偏差,然后通过对偏差的比例、微分、积...

  • ArcGIS基本概况

    功能 创建和使用地图 编辑地理数据 管理数据库中的地理信息 分析地理信息 共享和显示地理信息 在一系列应用程序中使...

  • 百度地图之地理编码和反地理编码

    地理编码:将地理信息转换成坐标信息的过程 反地理编码:将地理坐标转换成具体的地址信息 实现过程:

网友评论

      本文标题:通过GPS数据反向地理信息编码得到当前位置信息

      本文链接:https://www.haomeiwen.com/subject/ungbjxtx.html