新普金娱乐网址


地理18岁那年,恰逢高三

我是如此驾驭丘成桐的

iOS 定位地理

  • 二月 11, 2019
  • 地理
  • 没有评论

西历二〇一六年一月作于德班

.m

#import "MNLLocationTool.h"
#import <UIKit/UIKit.h>

#define isIOS(version) ([UIDevice currentDevice].systemVersion.floatValue >= version)

@interface MNLLocationTool ()<CLLocationManagerDelegate>

/** 记录要执行的代码块 */
@property (nonatomic, copy) ResultBlock block;
/** 位置管理者 */
@property (nonatomic, strong) CLLocationManager *locationManger;
/** 地理编码器 */
@property (nonatomic, strong) CLGeocoder *geocoder;

@end

@implementation MNLLocationTool

single_implementation(MNLLocationTool);  //声明单例方法

- (CLLocationManager *)locationManger {
    if (!_locationManger) {
        _locationManger = [[CLLocationManager alloc] init];
        _locationManger.delegate = self;

        if (isIOS(8.0)) {

            NSDictionary *infoDic = [NSBundle mainBundle].infoDictionary;
            //判断用户填写了哪个授权信息
            if (infoDic[@"NSLocationAlwaysUsageDescription"]) {
                [_locationManger requestAlwaysAuthorization];
            }else if (infoDic[@"NSLocationWhenInUseUsageDescription"]) {
                [_locationManger requestWhenInUseAuthorization];
            }else {
                NSLog(@"错误!如果在iOS8.0之后定位,必须在info.plist配置NSLocationAlwaysUsageDescription或 NSLocationWhenInUseUsageDescription Key!");
            }
        }
    }
    return _locationManger;
}

- (CLGeocoder *)geocoder {
    if (!_geocoder) {
        _geocoder = [[CLGeocoder alloc] init];
    }
    return _geocoder;
}


- (void)getCurrentLocation:(ResultBlock)block {

    self.block = block;

    //定位服务是否开启
    if ([CLLocationManager locationServicesEnabled]) {
        [self.locationManger startUpdatingLocation];
    }else {
        self.block(nil, nil, @"定位服务没有开启");
    }
}


- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {

    CLLocation *location = locations.lastObject;

    if (location.horizontalAccuracy < 0) return;

    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

        //在此处回调之前存起来的block
        if (placemarks.count) {
            CLPlacemark *placemaek = placemarks.firstObject;
            self.block(location, placemaek, nil); 
        }else {
            self.block(location, nil, error.localizedDescription/*错误信息*/);
        }
    }];
}

@end

按:胡洪骍先生在其汉语著述当中,颇多否定中国价值观文化的极端性言论,而在其国人较少读到的英文作文当中,却分明“同情中国知识”,认为“在华夏原本古板里面并相当长缺民主和不易的根源。”在传说周质平先生的发言此前,小编即已观望到了这一情景。胡希疆先生对其中文著述中“不妨拼命走极端”的“技巧”,可能自以为得计,可是历史的历程,已经为大家突显了一个引人注目标实况,那就是几代中国陆地人士中的精英阶层,已经严重缺失本民族历史文化的基础知识。小编在《从一名目繁多编制错误看古板经学的现世命局》一文中,曾经提出一批出版社、杂志社与网站的文字编辑已经茫然不知“经学”为啥物。本次看来闻名门户网站读书频道的召集人与文字编辑茫然不知“乾嘉学术”为啥物,又是才子阶层严重短缺历史文化的一个醒目例子。

#pragma mark - <CLLocationManagerDelegate>

/** 获取到位置信息时调用 */
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {

    //按时间排序,如果想要拿到最新的位置,直接拿最后一个
    CLLocation *location = locations.lastObject;

    location.coordinate;  //经纬度
    location.altitude; //海拔
    location.horizontalAccuracy;  //如果是负值,代表当前位置数据不可用
    location.verticalAccuracy; //如果是负值,代表当前海拔数据不可用
    location.course; //航向(0.0-359.9)
    location.speed; //速度
    location.floor; //楼层

    //两个地点之间的横向距离
    - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
}


/** 改变授权状态时激发 */
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {

   /* 
    授权状态
    kCLAuthorizationStatusNotDetermined = 0,  用户未决定            
    kCLAuthorizationStatusRestricted, 受限制 
    kCLAuthorizationStatusDenied, 被拒绝
    kCLAuthorizationStatusAuthorizedAlways 前后台定位授权
    kCLAuthorizationStatusAuthorizedWhenInUse 前台定位授权 
   */

    //判断当前设备是否支持定位,是否已经开启定位服务
    if (status == kCLAuthorizationStatusDenied && ![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位服务未开启");
    }else if (status == kCLAuthorizationStatusDenied) {
        NSLog(@"用户拒绝");

    //提醒用户授权,通过方法直接达到设置界面
    NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

     if ([[UIApplication sharedApplication] openURL:settingsURL]) {
          [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
     }
   }
}

“学术盛衰,当于百年前后论升降焉。……我朝开国,鸿儒硕学,接踵而出,乃远过乎千百年从前。乾隆帝中,学者更习而精之,可谓难矣,可谓盛矣。国初的话,诸儒或言道德,或言经术,或言史学,或言天学,或言地理,或言文字音韵,或言金石诗文,专精者固多,兼擅者尚少,惟嘉定钱辛楣先生能兼其成。由今言之,盖有九难。先生上课上书房,归里甚早,人伦师表,然履蹈粹,这个人所难能一也。先生深于道德性格之理,持论必执其中,实事必求其是,这个人所难能二也。先生潜研经学,传注疏义,无不彻原委,此人所难能三也。先生李欣蔓史杂史,无不讨寻,订千年未正之讹,此人所难能四也。先生通晓天算,三统上下,无不推而明之,此人所难能五也。先生改正地志,于天下古今沿革分合,无不考而明之,这个人所难能六也。先生于六书音韵,观其会通,得古人声音文字之本,此人所难能七也。先生于金石,无不编录,于官制史事,考核尤精,此人所难能八也。先生诗古文词,及其早岁,久已主盟坛坫,冠冕馆阁,此人所难能九也。合此九难,求之百载,归于嘉定,孰不云然!”

代办方法介绍

《胡适先生年谱长编初稿》第五册载胡洪骍《中国抗战也是要捍卫一种知识艺术》一文云:

.h

#import <Foundation/Foundation.h>
#import "Singleton.h"  //这是一个实现单例宏的头文件,在我的文章里面可以找到
#import <CoreLocation/CoreLocation.h>

typedef void(^ResultBlock)(CLLocation *location, CLPlacemark *placemark, NSString *error);

@interface MNLLocationTool : NSObject

single_interface(MNLLocationTool);

/** 获取当前位置 */
- (void)getCurrentLocation:(ResultBlock)block;

@end

“举多少个例子,他在英文作文里面讲到中国文化的时候,他说在炎黄原来古板里面并不长缺民主和不利的发源,他从大批量寿终正寝的经书里面恐怕从治学的法子里面,他说不易那样一个概念在华夏历来是有这么一个理念,像钱家的考证学,要拿出证据来,那样一个态势就是不易的千姿百态。至于民主这点,他觉得中国的社会历来是一个开花的社会,像科举制度,打破中国阶级的观念。从一个生人出生,农家子弟可以由此科举制度可以一飞冲天。第二,他认为中国平昔政坛内部有一个自身约束的能力,也就是所谓臣子要进言。他有不少地点从英文作文上的话更可怜中国知识。”

事例3 区域监听

《胡适之文存三集》卷二《治学的不二法门与素材》云:

- (void)requestWhenInUseAuthorization  //请求前台定位授权,需要在info文件添加:NSLocationWhenInUseUsageDescription
- (void)requestAlwaysAuthorization  //请求前后台定位授权,需要在info文件添加:NSLocationAlwaysUsageDescription

注:这两个方法,当[CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined(用户未决定)时无效;

周鲁

info文件定位音信.png

唐文治《十三经提纲》卷八之“《公羊传》”条云:

率先,须求导入地方框架
#import <CoreLocation/CoreLocation.h>
义务COO,使用全局创设,否则不大概启用置服务

  • self.locationManager = [[CLLocationManageralloc] init];

“乾嘉”考证学,抑或“钱家”考证学

/** 获取到设备朝向时激发 */
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading */*当前设备朝向*/)newHeading {

    newHeading.magneticHeading; //距离磁北方向角度
    newHeading.trueHeading; //距离真北方向角度
    newHeading.headingAccuracy; //如果是负值,代表角度无效
}


/** 进入指定区域时激发 */
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region


/** 离开指定区域时激发 */
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(nonnull CLRegion *)region


/* 
 请求指定区域的状态时激发,不仅可以获取指定区域状态,而且位置发生变化时,也会调用对应的代理方法.
 也就是说,这个方法同时监听 didEnterRegion 和 didExitRegion 两种状态. 
*/
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region


/** 定位失败时激发 */
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

“今之批评家,犹有一新风焉,则创作务求其新,务取其过激,以骇俗为华贵,以可以为大侠。此大非国度社会之福,抑非新文化前途之福也。”

- (void)viewDidLoad {
    [super viewDidLoad];

    self.locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;

    //判断当前设备是否支持区域监听
    if (![CLLocationManager isMonitoringAvailableForClass:[CLCircularRegion class]]) return;

    [_locationManager requestAlwaysAuthorization];  //区域监听需要请求用户授权定位信息

    //创建区域中心(经纬度)
    CLLocationCoordinate2D center = CLLocationCoordinate2DMake(20.025, 110.319);

    //设置区域半径
    CLLocationDistance distance = 1000;

    if (distance > _locationManager.maximumRegionMonitoringDistance) {
        distance = _locationManager.maximumRegionMonitoringDistance;    //最大监听范围
    }

    //创建一个区域,identifier 区域唯一标识符
    CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:distance identifier:@"嘉陵国际大厦"];

    //请求指定区域状态
    [_locationManager requestStateForRegion:region];
}


#pragma mark - <CLLocationManagerDelegate>

/** 当前请求指定区域状态时激发 */
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {

    /*
     state  状态
     CLRegionStateUnknown,  不知道
     CLRegionStateInside,   区域内
     CLRegionStateOutside   区域外
     */

    if (state == CLRegionStateInside) {
        NSLog(@"进入 %@ 区域", region.identifier);
    }else if (state == CLRegionStateOutside) {
        NSLog(@"离开 %@ 区域", region.identifier);
    }
}

“天涯论坛网”读书频道载《实录:周质平聊本人眼中的胡适之》一文云:

品质介绍

阮元《〈十驾斋养新录〉序》云:

_geocoder = [[CLGeocoder alloc] init];  //viewDidLoad代码

/** 地理编码(地址转经纬度)*/
- (IBAction)geoCode:(id)sender {

    [_geocoder geocodeAddressString:_addressTV.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {


        if (placemarks.count) {

            //placemarks 按相关性进行排序
            CLPlacemark *placemark = placemarks.firstObject;

            _addressTV.text = placemark.name;
            _latitudeTF.text = @(placemark.location.coordinate.latitude).stringValue;
            _longitudeTF.text = @(placemark.location.coordinate.longitude).stringValue;

            placemark.location;    //位置信息
            placemark.addressDictionary;    //地址的详情
            placemark.name; //地址名称
            placemark.ISOcountryCode;   //国家代码
            placemark.country;  //国家
            placemark.postalCode;   //地址邮编
            placemark.administrativeArea;   //行政区域
            placemark.subAdministrativeArea;    //次级行政区域
            placemark.locality; //城市名
            placemark.subLocality;  //下一级城市名
            placemark.thoroughfare; //道路名
            placemark.subThoroughfare;  //下一级道路名
        }
    }];
}


/** 反地理编码(经纬度转地址)*/
- (IBAction)reverseGeoCode:(id)sender {

    CLLocation *location = [[CLLocation alloc] initWithLatitude:_latitudeTF.text.floatValue longitude:_longitudeTF.text.floatValue];

    [_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

        if (placemarks.count) {

            //placemarks 按相关性进行排序
            CLPlacemark *placemark = placemarks.firstObject;

            _addressTV.text = placemark.name;
        }
    }];
}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}

按:以胡嗣穈先生为表示的一批“五四”时期的著有名气的人士,总是幻想着通过“不妨拼命走极端”和“矫枉必先过正”的“技巧”,来已毕中西文化与新旧文化的“折衷调和”。历史发展的进程,已经注解“五四”风流人物的有些傲然的“技巧”,未必足取。而清季民初的局地老谋深算持重之士所云,并非耸人听闻、杞天之忧,实为“警于未形,恐于未炽”。

封装 代理转block模式

地理,按:固然周质平先生所言之“乾嘉”考据学,非“今日头条网”读书频道所记之“钱家”考据学,但那并不意味“钱家”就从未考据学。嘉定钱氏与苏州钱氏,都是隋代与当代的考证有名气的人。君不见,上世纪的镀金硕士胡洪骍先生,已经用相比浪漫的语言来唤起青年学生们用“两脚”来“踢翻”既是“乾嘉”又是“钱家”的钱大昕先生了。将近一百年过去了,对于嘉定钱氏的考据学来说,人们即选择上“两万脚”,也很难完全“踢翻”,可是恒河沙数的华年学生,已经茫然不知“乾嘉”考据学和“钱家”考据学为什么物,想要维护学术规范的人,甚至可以不要考虑有人想要“打倒”和“踢翻”的题材了。

事例5 地理编码和反地理编码

“大家应有换条路走走了。等你们在正确实验室里有了好战表,然后拿出你们的绵薄,回来整理我们的国故,那时候,一拳打倒顾亭林,两脚踢翻钱竹汀,有什么难哉!”

#pragma mark - <CLLocationManagerDelegate>

/** 获取到位置信息时调用 */
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {

    //按时间排序,如果想要拿到最新的位置,直接拿最后一个
    CLLocation *location = locations.lastObject;

    if (location.horizontalAccuracy < 0) return;

    //确定当前航向
    NSInteger index = (int)location.course / 90;
    NSArray *courses = @[@"北偏东", @"东偏南", @"南偏西", @"西偏北"];
    NSString *course = courses[index];

    //确定当前偏离角度
    NSInteger angle = (int)location.course % 90;

    //确定行走距离
    CGFloat distance = 0;

    if (_lastLocation) {
        distance = [location distanceFromLocation:_lastLocation];
    }else {
        _lastLocation = location;
    }

    if (angle == 0) {
        course = [@"正" stringByAppendingString:[course substringToIndex:1]];    //正方向
        NSLog(@"%@", [NSString stringWithFormat:@"%@ 方向,移动了 %f 米", course, distance]);
    }else {
        NSLog(@"%@", [NSString stringWithFormat:@"%@ %ld 度方向,移动了 %f 米", course, angle, distance]);
    }
}

《胡先骕文存》上册载《论批评家之权利》一文云:

//开始定位追踪,开始定位后将按照用户设置的更新频率执行,方法返回定位信息
- (void)startUpdatingLocation 

/*
 显著位置变化定位服务(基站定位,要求手机有电话模块)当APP被完全关闭时,也可以接受到位置通知。
 并让APP进入后台处理,精度不大,所以耗电小,而且定位更新频率依据基站密度而定。
*/
- (void)startMonitoringSignificantLocationChanges

/*
 单次定位请求(9.0)
 按照精确度从低到高逐个进行定位,在有效时间内返回精确度最高的位置。
 不能与 startUpdatingLocation 一起使用。
 注:必须调用定位失败代理方法。
*/
- (void)requestLocation

- (void)stopUpdatingLocation  //停止定位追踪

- (void)startUpdatingHeading  //获取当前设备朝向(磁力计传感器)

//开始监听区域,只有用户进入或离开区域动作时才会调用对应代理方法
- (void)startMonitoringForRegion:(CLRegion *)region

- (void)requestStateForRegion:(CLRegion *)region  //请求指定区域状态

“儒者立言,平则致天下之和,激则致天下之祸,而世界且因之移易焉。可不惧哉?”

例子2 指南针

“我们不妨拼命走极端,文化的惰性自然会把大家拖向折衷调和上去的。”

地理编码-反地理编码.png

钱大昕先生像

//代理
@property(assign, nonatomic, nullable) id<CLLocationManagerDelegate> delegate;

//位置信息更新最小距离,只有移动大于这个距离才更新位置信息,默认为kCLDistanceFilterNone:不进行距离限制
@property(assign, nonatomic) CLLocationDistance distanceFilter;

/*
 定位精确度 
 kCLLocationAccuracyBestForNavigation 最适合导航
 kCLLocationAccuracyBest; 最精确定位
 kCLLocationAccuracyNearestTenMeters; 十米误差
 kCLLocationAccuracyHundredMeters; 百米误差
 kCLLocationAccuracyKilometer; 千米误差
 kCLLocationAccuracyThreeKilometers; 三千米误差 
 注:精确度越高越耗电,而且定位时间越长 
*/ 
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

《独立评论》第一百四十二期载胡希疆《编辑后记》云:


按:上引文字,是“天涯论坛网”所记周质平先生之答问,小编稍作浏览,便有一种步履蹒跚的感觉:周质平先生是普林斯顿高校东南亚系的授课,怎么会把“乾嘉”的考证学当作“钱家”的考证学?“今日头条网”的文字错误,显著是因为其阅读频道的主持人与文字编辑茫然不知“乾嘉学术”为何物。

APP授权状态.png

“凡事矫枉过正,未有不坠于一偏者也。”

例子1
打印当前用户的行动方向,偏离角度以及对应的行路距离
例如:北偏东30度方向,移动了8米。

朱一新《无邪堂答问》卷四云:

#pragma mark - <CLLocationManagerDelegate>

/** 获取到设备朝向时激发 */
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {

    if (newHeading.headingAccuracy < 0) return;

    //获取设备朝向(角度)
    CLLocationDirection angle = newHeading.magneticHeading;

    float radius = angle / 180.0 * M_PI;    //角度转弧度

    [UIView animateWithDuration:.35 animations:^{
        _compassView.transform = CGAffineTransformMakeRotation(-radius);
    }];
}

“……以上是神州于是爱好和平与青眼民主的有些理论性的、历史学性的底子。那么些古板与特出,是在时代前三世纪,中国先是个学术成熟时代初始于大家的先圣先贤,而且薪火相承到前几天。美利坚合众国国会教室东方组经理赫Moll(A.
W.
Hummel)是自我的一位好友。他对中国民主思想,曾对亚圣的民主学说,表示以下的看法:‘中国在两千多年的天皇体制下,不但革命的论调可以存在,而这一个含有革命思想的图书,竟又用来作为考选政坛官僚的依据,那其实是不可捉摸的事。’”

格局介绍

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图