新普金娱乐网址


自是外星人(下)

地理通灵之战 | 浅谈对玄学的思索

西路北风‖第一回 开通往格尔木的偶遇

  • 九月 11, 2018
  • 地理
  • 没有评论

一律、定位介绍

今天众多周旋、电商、团购应用都引入了地图跟一定功能,似乎地图功能不再是地图应用和导航应用所特有的。的确,有了地图和定位功能实在给咱的在越丰富多彩,极大的变更了咱们的活方式。要落实地图、导航功能,往往要事先熟悉定点功能

作者:大红羊

在iOS中通过CoreLocation框架进行定位操作。

CoreLocation自己可以单独行使,和地图开发框架MapKit全是单独的,但是反复地图开发使配合定位框架下。

惹:【唐
薛能《蒙恩除侍御史行不成华州寄蒋相》诗:“行野众喧闻雁发,宿亭孤寂有狼嗥。”】

CoreLocation可兑现之效能:
  1. 固定功能
  1. 地理编码和欢迎地理编码

夏日,大西北的寒气稍有消融,天空蓝色和地面的新民主主义革命终究要比强烈,湖水清澈,鸟儿欢歌,树木逢春,中国处高原之西北广袤的地又迎来新一轱辘旅游的漫游潮,在这片神秘而同时危险的社会风气里,很多地方美景如鸿,让丁忘情,大批的寻梦者前往追逐,使那里的情调变得斑斓,格尔木是错开往各个景点深处的重大大门,这里是成百上千游人的必经之地,神秘之社会风气由这里开始,我们的故事也用从今此间开始。

第二、定位核心类

定点是一个百般常用之功力,如部分地形图软件打开之后如果用户同意软件定位的话,那么打开软件后即会见活动锁定到手上职,如果用户手机移动那么当前职务为会见跟随着变化。要促成者功能要采用CoreLoactionCLLocationManager仿佛,下面是这近乎的利用验证:

“格尔木”为蒙古语音译,意呢川密集的地方,它地处青海省右、青藏高原内地,辖区由柴达木盆地中南部和唐古拉山地区区区片互不相连的区域整合,市区位于柴达木盆地中南部格尔木河冲积平原上,平均海拔2780米,属高原大陆性气候。格尔木为东方是西宁,以北是敦煌,以南是拉萨,地理位置深重大,是通往新疆、西藏齐地之中转站。

1. 类方法:
+ (BOOL)locationServicesEnabled;/* 返回用户是否启用定位服务 */
+ (CLAuthorizationStatus)authorizationStatus;/* 定位服务授权状态,返回枚举类型 */

typedef NS_ENUM(int, CLAuthorizationStatus){
    kCLAuthorizationStatusNotDetermined = 0, /* 用户尚未决定是否启用定位服务 */
    kCLAuthorizationStatusRestricted, /* 没有获得用户授权 */
    kCLAuthorizationStatusDenied, /* 用户禁止使用定位或者定位服务处于关闭状态 */
    kCLAuthorizationStatusAuthorizedAlways, /* 前台、后台定位授权 */
    kCLAuthorizationStatusAuthorizedWhenInUse, /* 前台定位授权 */
};

在相同排始发为格尔木的火车上,一个爱人当邻近窗户的座椅上出示与所有车箱里的情调格格不入,他身上穿在老旧的冲锋衣,脖子上挂在一个略老的沙洲风镜,头发乱糟糟的,胡子为很遥远无清理了,他的睛神疲惫中满了血丝,他的样子却白晰异常,他那么修长而精的手里拿在同样布置旅游地图,那张地图看起有些破旧,地图的纸发黄的似常年的报纸,没有了油墨的光让地图上的笔迹符号变得多少昏暗,地图上亮着西藏的各个旅游景点的坐标,那点还有不少描绘上的记号,应该是男人好之所以笔加上去的,符号颜色各异说明是因此不同颜色之笔标记的。那些无知道什么意义的号,让老公边上为正的多少男孩很是惊讶,好好的同样张旅游地图为什么打的胡的?难道那些标记有财富呢?

2. 对象属性:
  • 定位精度desiredAccuracy
    枚举类型:

  • 职务信息更新最小离distanceFilter
    浮点数,默认为kCLDistanceFilterNone,表示未开展去限制

“叔叔而这地图很老呀,是古董吗?”小男孩用多少手轻轻地推了瞬间身边的斯汉子。

3. 目标方法:
#pragma mark - 定位追踪
-(void)startUpdatingLocation;/* 开始定位追踪 */
-(void)stopUpdatingLocation;/* 停止定位追踪 */
#pragma mark - 导航追踪
-(void)startUpdatingHeading;/* 开始导航方向追踪 */
-(void)stopUpdatingHeading;/* 停止导航方向追踪 */
#pragma mark - 区域定位追踪
-(void)startMonitoringForRegion:(CLRegion *)region;/* 开始对某个区域进行定位追踪 */
-(void)stopMonitoringForRegion:(CLRegion *)region;/* 停止对某个区域进行定位追踪 */
#pragma mark - 授权请求
-(void)requestWhenInUseAuthorization;/* 请求获得应用前台定位授权 */
-(void)requestAlwaysAuthorization;/* 请求获得应用前后台定位授权 */

“嗯?这个地图也?”男人吃男性胎一样推就从自己之社会风气里转了神来,隐藏于目里转的眼泪默默消失在眼内,他应在回想在啊事情。

4. 常用代理方CLLocationManagerDelegate
/* 位置发生改变后调用,第一次定位也会调用 */
-(void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations;
/* 导航方向发生变化后调用 */
-(void)locationManager:(CLLocationManager *)manager 
      didUpdateHeading:(CLHeading *)newHeading;
/* 进入某个区域后调用 */
-(void)locationManager:(CLLocationManager *)manager 
        didEnterRegion:(CLRegion *)region;
/* 走出某个区域后调用 */
-(void)locationManager:(CLLocationManager *)manager 
         didExitRegion:(CLRegion *)region;
/* 当用户授权状态发生变化时调用 */
-(void)locationManager:(CLLocationManager *)manager 
       didChangeAuthorizationStatus:(CLAuthorizationStatus)status;

“是什么,叔叔是地图好老呀,你看上面还有脏的地方呢,你干吗未磨擦。我帮您擦擦吧!”说正在稍加男孩很是热心,就要用手里的稍手绢去错那地图上沾染的污迹。

老三、定位简单用

“别!不要接触她!”男人像是遭到了鼓舞,突然眼神变的凌冽起来,强而有力的不得了手讯速护住管地图,另一样就手则将地图拿大起来。

先行使于路导入CoreLocation框架,然后再导入头文件:
#import <CoreLocation/CoreLocation.h>

“呀?!叔叔而吓到自我了。”男胎顿时收住了手,满眼的惊惧,脸上的色反应有他被吓了一跳。

iOS版本不同,使用啊时有发生一部分区别,主要区别为:
  1. iOS8.0事先的固定应用
  1. iOS8.0事后的永恒应用

“啧啧啧,多特别之人头矣,还吓孩子,多多,来!上妈妈就来。”对面以在的妻妾看不下去男人的做法,自己男好心好意帮助夫汉子,竟然吃这个不识趣的老公让好够呛了。

1. iOS8.0事先的稳定应用:

“对不起!我不是故意的,我性子不好还恳请而谅解。”男人快速收于了地图小心翼翼的包装冲锋衣的内侧口袋里。

1.1 前台定位:
- (void)viewDidLoad{
    [super viewDidLoad];
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位服务当前可能尚未打开,请设置打开!");
        return;
    }
    [self initLocationManager];
    //调用方法,开始更新用户位置信息
    [self.locationM startUpdatingLocation];
}
//创建CLLocationManager并启动定位
- (void)initLocationManager{
    //创建CLLocationManager对象并设置代理
    self.locationM = [[CLLocationManager alloc] init];
    self.locationM.delegate = self;
    //设置定位精度和位置更新最小距离
    self.locationM.distanceFilter = 100;
    self.locationM.desiredAccuracy = kCLLocationAccuracyBest;
}
//在对应的代理方法中获取位置信息
- (void)locationManager:(CLLocationManager *)manager 
     didUpdateLocations:(NSArray<CLLocation*> *)locations
{
    CLLocation *location = [locations firstObject];//取出第一个位置
    /* 
        使用位置前, 务必判断当前获取的位置是否有效
        如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用
     */
    if (location.horizontalAccuracy < 0)
        return;
    CLLocationCoordinate2D coordinate = location.coordinate;//位置坐标 
    CGFloat longitude = coordinate.longitude;//经度
    CGFloat latitude = coordinate.latitude;//纬度
    CGFloat altitude = location.altitude;//海拔
    CGFloat course = location.course;//方向
    CGFloat speed = location.speed;//速度
    NSLog(@"经度:%f,纬度:%f",longitude,latitude);   
    NSLog(@"海拔:%f,方向:%f,速度:%f",altitude,course,speed);
    //如果不需要实时定位,使用完即使关闭定位服务
    [self.locationM stopUpdatingLocation];   
}
  1. 永恒频率与定位精度并无是更加规范越好,需要看到实际状况要肯定,因为尤其规范越耗性能,也尽管更加费电。
  1. 原则性成后会冲设置情况屡屡调用locationManager:didUpdateLocations:方法
  2. 每个元素一个CLLocation表示地理位置信息,之所以返回数组是盖有些上一个位置点可能含有多单职位。
  3. 行使完毕定位服务后,如果未待实时监督该马上关闭定位服务,以节省资源。
  4. 除开提供定位功能,还可调用startMonitoringForRegion:道对点名区域开展监察。

“没事的,叔叔一定是准备爬雪山吧?”男胎无理会他的妈妈,没有走至对面座位去,他扔然希望以及这员生脾气的伯父在联合。

1.2 后台定位:

以前台的基本功及,勾选后台模式Location updates

“好孩子,没好到您吧?叔叔没有打算爬雪山底。”男人对的多少心不在焉,但要么吃了男胎一个微笑。

2. iOS8从此的固定应用

“我没事,叔叔而过得吗绝重视了,现在且是夏季了,难及父辈是使于外围过夜吗?叔叔带的东西确实多呀。”小男孩好奇的拘留在爱人带齐火车的武装,足足有三生担保,身上还坐在个包。全副武装也无呢过之。

iOS8开始,需要请定位授权:
  • 前台授权:
    在Info.plist文件中布置
    NSLocationWhenInUseUsageDescriptionYES

  • 前后台授权:
    当Info.plist文件中配置NSLocationAlwaysUsageDescriptionYES

- (void)viewDidLoad{
    [super viewDidLoad];
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位服务当前可能尚未打开,请设置打开!");
        return;
    }
    [self initLocationManager];
    //如果没有授权,则请求用户授权
    CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
    if (status == kCLAuthorizationStatusNotDetermined){
        //请求前台定位授权
        //[self.locationM requestWhenInUseAuthorization];
        //请求前后台定位授权
        [self.locationM requestAlwaysAuthorization];
    }
}

//创建CLLocationManager并启动定位
- (void)initLocationManager{
    //创建CLLocationManager对象并设置代理
    self.locationM = [[CLLocationManager alloc] init];
    self.locationM.delegate = self;
    //设置定位精度和位置更新最小距离
    self.locationM.distanceFilter = 100;
    self.locationM.desiredAccuracy = kCLLocationAccuracyBest;
}
// 当用户授权状态发生变化时调用
- (void)locationManager:(CLLocationManager *)manager 
        didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    switch (status) {
        case kCLAuthorizationStatusNotDetermined://用户还未决定
        {
            NSLog(@"用户还未决定");
            break;
        }
        case kCLAuthorizationStatusRestricted://访问受限
        {
            NSLog(@"访问受限");
            break;
        }
        case kCLAuthorizationStatusDenied://定位关闭时或用户APP授权为永不授权时调用
        {
            NSLog(@"定位关闭或者用户未授权");
            break;
        }
        case kCLAuthorizationStatusAuthorizedAlways://获取前后台定位授权
        {
            NSLog(@"获取前后台定位授权");
            [self.locationM startUpdatingLocation];
            break;
        }
        case kCLAuthorizationStatusAuthorizedWhenInUse://获得前台定位授权
        {
            NSLog(@"获得前台定位授权");
            [self.locationM startUpdatingLocation];
            break;
        }
        default:break;
    }
}
//在对应的代理方法中获取位置信息
- (void)locationManager:(CLLocationManager *)manager 
     didUpdateLocations:(NSArray<CLLocation*> *)locations
{
    CLLocation *location = [locations firstObject];//取出第一个位置
    /* 
        使用位置前, 务必判断当前获取的位置是否有效
        如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用
     */
    if (location.horizontalAccuracy < 0)
        return;
    CLLocationCoordinate2D coordinate = location.coordinate;//位置坐标
    CGFloat longitude = coordinate.longitude;//经度
    CGFloat latitude = coordinate.latitude;//纬度
    CGFloat altitude = location.altitude;//海拔
    CGFloat course = location.course;//方向
    CGFloat speed = location.speed;//速度
    NSLog(@"经度:%f,纬度:%f",longitude,latitude);
    NSLog(@"海拔:%f,方向:%f,速度:%f",altitude,course,speed);
    //如果不需要实时定位,使用完即使关闭定位服务
    [self.locationM stopUpdatingLocation];
}

控制台打印

“你猜对了,叔叔是打算只要于外面过夜的。”男人看正在有点男孩笑了笑,又冲在对面脸色不绝好的农妇笑了笑笑,那家不再扣留他,算是没有异常他了。

季、地理编码

一定服务被还含CLGeocoder接近,用于拍卖地理编码和逆地理编码功能。

  • 地理编码:根据加的岗位(通常是地名)确定地理坐标(经、纬度)。
    【位置 -> 地理坐标】
  • 逆地理编码:可以因地理坐标(经、纬度)确定位置信息(街道、门牌等)。
    【地理坐标 -> 位置】

- (void)viewDidLoad {
    [super viewDidLoad];
    self.geocoder = [[CLGeocoder alloc] init];
    [self getCoordinateByAddress:@"北京"];
    [self getAddressByLatitude:39.54 longitude:116.28];
}

#pragma mark 根据地名确定地理坐标
-(void)getCoordinateByAddress:(NSString *)address{
    //地理编码
    [self.geocoder geocodeAddressString:address 
                      completionHandler:^(NSArray *placemarks, NSError *error) {
        //取得第一个地标,地标中存储了详细的地址信息,注意:一个地名可能搜索出多个地址
        CLPlacemark *placemark = [placemarks firstObject];
        CLLocation *location = placemark.location;//位置
        CLRegion *region = placemark.region;//区域
        NSDictionary *addressDic = placemark.addressDictionary;//详细地址信息字典
        NSLog(@"位置:%@,区域:%@,详细信息:%@",location,region,addressDic);
    }];
}
#pragma mark 根据坐标取得地名
-(void)getAddressByLatitude:(CLLocationDegrees)latitude 
                  longitude:(CLLocationDegrees)longitude
{
    //反地理编码
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude 
                                                      longitude:longitude];
    [self.geocoder reverseGeocodeLocation:location 
                        completionHandler:^(NSArray *placemarks, NSError *error) {
        CLPlacemark *placemark = [placemarks firstObject];
        NSLog(@"详细信息:%@",placemark.addressDictionary);
    }];
}

“那张地图对叔叔好关键是吧?”男胎同时想开了地图上之潜在符号。

地标类CLPlacemark还带有以下信息:
NSString *name = placemark.name;//地名
NSString *thoroughfare = placemark.thoroughfare;//街道
NSString *subThoroughfare = placemark.subThoroughfare; //街道相关信息,例如门牌等
NSString *locality = placemark.locality; // 城市
NSString *subLocality = placemark.subLocality; // 城市相关信息,例如标志性建筑
NSString *administrativeArea = placemark.administrativeArea; // 州
NSString *subAdministrativeArea = placemark.subAdministrativeArea; //其他行政区域信息
NSString *postalCode = placemark.postalCode; //邮编
NSString *ISOcountryCode = placemark.ISOcountryCode; //国家编码
NSString *country = placemark.country; //国家
NSString *inlandWater = placemark.inlandWater; //水源、湖泊
NSString *ocean = placemark.ocean; // 海洋
NSArray *areasOfInterest = placemark.areasOfInterest; //关联的或利益相关的地标

“好孩子,你说的针对性。是指向叔叔特别关键的事物也,不克破坏的要不然没法看了。”男人眼神坚毅的作答让男孩,脸上有矣若干自然的微笑,算是为男孩一个好印象吧。

下同样节省我会写地图类MapKit的系笔记,敬请期待吧!有什么问题得以以凡评论区提出,O(∩_∩)O哈!

“我哉发出坏要紧之东西啊!我要是把她送给她!”男胎看正在老公,表情坚毅的点在头,并且信心全的拿在些许拳头。

“哦?什么事物送给谁呀?”男人看正在这个天真的儿女好有好感,他因而那么双来把血色的夹立刻着男孩的肉眼,多么明亮清澈的双眼啊,他微微大意,好像在哪里吧发出如此对解清澈的双睛在看正在他,那对遥远在心尖无法忘记的肉眼。

“这个东西给我妈妈了在保险里了,我准备把其送给自己西藏之好对象白玛卓玛的。”小男孩用手比划在什么事物,对先生说道。

“什么!你刚刚说其受什么名字?!”男人吃惊的禁闭正在稍加男孩,男人的身体剧烈地颤抖抖了起来,他尽心稳住身体,让身体的动作小一些,因为他未思量重新吓到小男孩。

“我是说要将拉动的人情为一个重点的食指吗,很重大之啊,送给一个让白玛卓玛的多少妹妹。”男胎看正在老公的颜面,发现他身体颤抖着,眼睛里之血色浓郁了不少,他初步认为这个汉子神魂颠倒起来的神气十分风趣,像这么动不动就相同面子古怪的楷模地确很好笑,小男孩很想笑,但还是忍住了。

“多多啊,坐妈妈身上来,妈妈哄而安息了。”对面的老伴说了,她发现这个男人不绝健康,她起担心好的男女。

“妈妈,我还免思睡觉也。”男孩嘟囔着口,很无情愿的至对面妈妈的怀里去矣。女人顺势抱于了男孩,轻轻磕碰在男孩的脊梁,摇晃起身体来,想尽快来哄睡小男孩。

“原来是白玛卓玛……不是白玛央吉,不是白玛央吉,不是白玛央吉。”男人比不上着头,用手杵着额头嘴里不停止的唠叨着,身体日渐地稳定下来,也许只有这样才能够给他冷静下来。

“白玛卓玛?!”对面的内听到男从在念的名小声嘀咕起来,她突然停了晃孩子,好像想到了什么一样,她探起身子用肉眼不歇的估量起对面的女婿,想仔细看清者汉子。她圈了晚沉默了一晃后,突然就出发,一面子的惊恐的得到在儿女离开了座位。

“妈妈怎么了?”男孩看到妈妈摇着好之手突然停下了,然后拿走于协调不怕为车箱远处走,很是免破的禁闭于妈妈问道。

“你?是北凉?你怎么回了?!”那个女人脱胎换骨看在小着头的汉子说道,然后如是躲瘟神一样走起来了。

“哦!?”男人忽然内发现是女人竟然认识好。

“妈妈你认识这个大爷啊,他是哪位呀,好怪的丁呀?”小男孩好奇的问道,他莫悟出妈妈会面认识是叔叔。

“多多乖不要问了,咱们离他远点呀,他这人好取得上不好的政工。到时就未是好人了。”妈妈抱在儿女越来越打进一步远。

“叔叔,你快告诉自己,你可怜地图及画在的大妈的狼头的地方是何啊?我刚就想咨询来在,那个狼头好出胆魄,在地形图及顶明显啦!”小男孩在妈妈的怀抱挣扎在,想问问老公最终一个题材。

先生沉默了,他没有吃多少男孩想如果之答案。

老婆获得在儿女错过了卫生间,可能一会尚得回来吧,可是北凉想错了,回来的是一个女孩子,女孩子本来从没打至坐票,可是碰到了好心的母子两人口,把座位让给了其,她纵然打过道一路颠至座位,扔下一怪一聊点儿独保险,坐在座位上喘在粗气。

先生在台上同时开拓了地图,没有在意到身边换了人口。他的手还白皙,双手轻轻的触摸着地图上那么一个个标记,很是匪放弃的范,睛中满是泪光。

“朋友咨询您一个题材,你打的特别狼头符号的地方是狼嗥谷吗?话说你的地形图好老哦,有些路线变了,你当打个新的地图。”新来之女童在一边看正在爱人的地形图,很热心的及男人说于了话语。

因于对面一个直睡着的老爷爷突然睁开眼睛看于了此处,他把眼放在了身前的先生身上。

“一个懦夫回来了吧?”老爷子看了相同目男人,然后耸耸肩,叹了人暴后还要闭上了眼在睡觉吧?边上听道女孩子提到狼嗥谷这三独字之总人口闹有,这些口还向就边看来,看在还不动在圈地图的丈夫,紧接着不少人数在窃窃私语起来,话提好像就是是是男人。

“什么懦夫啊?这老人讲怎么这么呀?话说而吃什么呀?看您这样冷是勿是情绪不好呀?”女孩子往嘴里扔在花生,一边吃着一面对先生说道。

“懦夫也?是的尚未错!我便是懦夫!”男人抬起头来看向女孩。这等同抬头不要紧,刚好看到好可怜的同一夹眼睛,男人一下呆住了,清澈而水也无也过呀。

“你看毛线啊!我脸上有花吗?”女孩突然见到男人的神,突然间笑的花枝乱颤。

“我是秦北玉,一个不知天高地厚的东北人。要去格尔木,那个,请问你让什么名字?”男人突然对就妮子说道。他本底变现不行像是当安静的湖上激起千更浪。很多人看于此,看向此男人。

女孩子收住笑声,手里拿在没有吃到嘴里的花生看到车箱里之众人看正在自己,一时间呆住了,这是什么状态?

(待续)

相关文章

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