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

原创 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(@"定位失败了");
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

简单图片地图功能

  • 2012-05-03 12:55
  • 54KB
  • 下载

浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)

今天我们来谈下百度地图的定位功能,在此之前我已经将百度地图的基本地图大概说了下,其实百度地图的基本功能还有很多的内容。感兴趣的可以到百度地图的开发者的官网看看。今天就开始来讲下百度地图中的定位功能。 ...

iOS 高德室内地图导航功能的简单实现

打开高德官网:http://lbs.amap.com/ ,并注册、登录,在控制台中创建应用,拿到Key值。 点击iOS室内地图SDK 开发文档:http://lbs.amap.com/ap...

百度地图 Android SDK - 检索功能使用的简单示例

百度地图 SDK 不仅为广大开发者提供了炫酷的地图展示效果、丰富的覆盖物图层,更为广大开发者提供了多种 LBS 检索的能力。通过这些接口,开发者可以轻松的访问百度的 LBS 数据,丰富自己的移动端地图...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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