地图(无界面的 简单功能)

原创 2016年05月31日 16:42:24

首先引入库的头文件

//引入库的头文件
#import <CoreLocation/CoreLocation.h>

需要遵循的代理 以及声明所要用到的属性

@interface ViewController ()<CLLocationManagerDelegate>
//定位管理器
@property (nonatomic, strong) CLLocationManager *manager;
//编码反编码的类
@property (nonatomic, strong) CLGeocoder *geocoder;

@end

具体操作:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //定位的步骤
    //第一步:初始化管理器
    self.manager = [[CLLocationManager alloc] init];
    //第二步:进行隐私的判断并授权

    //进行隐私的判断
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"是否前往隐私进行设置隐私定位");
    }
    //根据状态进行授权
    //进行版本的判断
    if ([[[UIDevice currentDevice] systemVersion] integerValue] >= 8.0) {
        if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
            /*
             定位服务授权状态,返回枚举类型:
             kCLAuthorizationStatusNotDetermined: 用户尚未做出决定是否启用定位服务
             kCLAuthorizationStatusRestricted: 没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权
             kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态
             kCLAuthorizationStatusAuthorizedAlways: 应用获得授权可以一直使用定位服务,即使应用不在使用状态
             kCLAuthorizationStatusAuthorizedWhenInUse: 使用此应用过程中允许访问定位服务
             */

      /* ************* */    //在授权请求之前 需要在infoPlist中设置允许定位的内容:NSLocationWhenInUseUsageDescription 或者 NSLocationAlwaysUsageDescription

            //请求授权
            [self.manager requestWhenInUseAuthorization];
        }
    }
    //第三步设置管理的代理和相关属性
    self.manager.delegate = self;
    //设置精度
    self.manager.desiredAccuracy = 100;
    //设置最小更新距离
    self.manager.distanceFilter = 100;

    //第四步:开启定位
    [self.manager startUpdatingLocation];

    /*********************************编码和反编码*****************************************/

    //初始化对象
    self.geocoder = [[CLGeocoder alloc] init];

    //根据地名获取经纬度
  // [self getCoordinateByAdress:@"浏阳"];

    //根据经纬度反编码取出地名
  //  [self getAdressByLongitude:115 latitude:29.5];

    //计算两点间的距离
    [self distance];

}

- (void)getCoordinateByAdress:(NSString *)address{
    //编码方法
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        //根据返回的地标 取出第一个位置
        CLPlacemark *mark = placemarks.firstObject;

        //根据mark得到location
        CLLocation *location = mark.location;

        //根据mark获取区域
        CLRegion *region = mark.region;
        //获取addressDic
        NSDictionary *adressDict = mark.addressDictionary;

        NSLog(@"地表位置:%@,区域:%@,地理位置:%@", location, region, adressDict);
    }];
}


- (void)getAdressByLongitude:(CLLocationDegrees)longitude latitude:(CLLocationDegrees)latitude{
    //反编码
    //创建CLLocation
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        NSDictionary *dic = placemarks.firstObject.addressDictionary;

        NSLog(@"地名%@", dic);

    }];
}
#pragma mark - 计算两个位置的距离
- (void)distance{
   //计算位置1
    CLLocation *locationJiujiang = [[CLLocation alloc] initWithLatitude:29.5 longitude:116];
    //计算位置2
    CLLocation *locationliuyang = [[CLLocation alloc] initWithLatitude:28.1 longitude:113.6];
    CLLocationDistance distance = [locationliuyang distanceFromLocation:locationJiujiang];
    NSLog(@"%f",distance);

}


#pragma mark - CLLocationManagerDelegate代理方法
//这个代理方法是定位成功之后开始更新位置信息 只要移动了设置的最小距离之后就开始
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    //获取最后一次的位置
    CLLocation *location = locations.lastObject;
    CLLocationCoordinate2D coorDinate = location.coordinate;
    NSLog(@"经度:%f,纬度:%f,海拔:%f,行走速度:%f", coorDinate.longitude, coorDinate.latitude, location.altitude, location.speed);

    //为节省电源 如果不使用定位 需要把定位关掉
    [self.manager stopUpdatingLocation];


}

//定位失败走的方法
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"定位失败了");
}

javascript实现简单的Map示例

转载:http://www.jb51.net/article/44742.htm /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * ...
  • a312024054
  • a312024054
  • 2017年04月17日 15:07
  • 496

通讯录(有界面的和无界面的)

通讯录(有界面) - (void)touchesBegan:(NSSetUITouch *> *)touches withEvent:(UIEvent *)event {     ...
  • qq_33030123
  • qq_33030123
  • 2015年12月01日 18:35
  • 112

有界、无界队列对ThreadPoolExcutor执行的影响

Java提供了4钟线程池: newCachedThreadPool newFixedThreadPool newSingleThreadExecutor newScheduledThreadP...
  • kusedexingfu
  • kusedexingfu
  • 2017年05月18日 20:08
  • 4896

并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究

一、 前言 常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentLinkedQueue是...
  • andyzhaojianhui
  • andyzhaojianhui
  • 2017年07月20日 01:00
  • 312

从头认识java-13.13 无界通配符

这一章节我们来讨论一下无界通配符。1.怎样使用无界通配符?无界通配符是直接使用例子:package com.ray.ch13; import java.util.ArrayList; impo...
  • raylee2007
  • raylee2007
  • 2015年12月21日 21:37
  • 1875

[JSOI2016]无界单词

题目大意一个只由a和b组成的长度为n的字符串,如果kmp后next[n]=0,则称之为无界单词。给定n和m,求长度为n的无界单词个数以及第m小的。第一问正难则反! 设f[i]表示长度为i的无界单词数...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2016年04月25日 19:05
  • 627

在android项目中简单的集成baidu地图之定位功能

第一步、进入百度地图android 定位SDK界面 http://developer.baidu.com/map/index.php?title=android-locsdk 第二步、获取密钥后创建...
  • bruceyangjie
  • bruceyangjie
  • 2015年12月25日 17:17
  • 1244

浅谈百度地图的简单开发最后收官之实现导航功能(五)

这篇是高仿百度地图的最后一篇了,今天主要来实现百度地图的导航的功能,并且该导航还自带语音播报功能,然后最后对整个百度地图开发过程遇到的问题进行一些列举,并给出一些解决的办法,可能总结的不是很齐全,希望...
  • u013064109
  • u013064109
  • 2016年03月21日 23:33
  • 10677

百度地图SDK for Android【Demo调起百度地图客户端导航功能】

转自:http://blog.csdn.net/baidulbs/article/details/8959875 百度地图Android SDK V2.1.1为广大开发者提供调起百度地图客户...
  • gf771115
  • gf771115
  • 2015年01月09日 14:45
  • 10797

android最简单手机地图APP(只需5分钟)

android最简单手机地图APP——只有三部分。 第一部分 首先建立一个MapActivity在setContentView(R.layout.activity_map)...
  • sinat_30474567
  • sinat_30474567
  • 2016年08月02日 21:50
  • 332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:地图(无界面的 简单功能)
举报原因:
原因补充:

(最多只允许输入30个字)