地图位置定位的封装开发

在很多的APP开发中经常使用到定位功能,对于这种常用的方法很有必要对其封装使用

话不多说直接上代码:使用到了单例设计模式:
`

import <Foundation/Foundation.h>

import <MapKit/MapKit.h>

@protocol PositionToolDelegate <NSObject>

@optional
/**

  • 位置改变时通知传值
    */

    • (void)noticePositionChanged;

@end

@interface PositionTool : NSObject<CLLocationManagerDelegate,PositionToolDelegate> {
CLLocationManager _locationManager;
NSMutableArray
_locationArr ;
}

@property (nonatomic,assign) CLLocationDegrees latitude;//经度
@property (nonatomic,assign) CLLocationDegrees longtitude;//纬度
/**

  • 位置地区信息
    /
    @property (nonatomic,strong) NSString
    positionName;
    @property (nonatomic,strong) NSString province;
    @property (nonatomic,strong) NSString
    city;
    @property (nonatomic,strong) NSString *area;

//@property (nonatomic,strong) id<PositionToolDelegate> delegate;

/**

  • 添加回调代理方法
    */

    • (void)addDelegate:(id)delegate;
      /**
  • 移除回调代理方法
    */
    • (void)removeDelegate:(id)delegate;
      /**
  • 获取位置中心信息
    */
    • (CLLocationCoordinate2D)getCenter;
      /**
  • 更新位置
    */
    • (void)updateLocation;
  • (void)getLocation;

/**

  • 单例初始化方法
    */

    • (PositionTool )shareInfo;
      /*
  • 释放单例信息
    */
    • (void)freeInfo;

@end
.m方法的实现

  • (PositionTool*)shareInfo {
    @synchronized(self) {

      if (_positionTool == nil) {
          _positionTool=[[PositionTool alloc] init];
          [email protected]"没有定位";
      }

    }
    return _positionTool;
    }
    /**

    • 释放单例实现
      */
  • (void)freeInfo {
    if (_positionTool) {
      _positionTool = nil;

    }
    }

  • (id)init {
    self=[super init];
    if (self) {
      _locationArr=[[NSMutableArray alloc] init];

    }
    return self;
    }
    /**

    • 代理回调添加和删除实现方法
      *
    • @param delegate 代理
      */
  • (void)addDelegate:(id<PositionToolDelegate>)delegate {
    [_locationArr addObject:delegate];
    }
  • (void)removeDelegate:(id)delegate {
    [_locationArr removeObject:delegate];
    }

/**

  • 获取位置信息
    */
  • (CLLocationCoordinate2D)getCenter {
    return [_locationManager location].coordinate;
    }
  • (void)updateLocation {
    [_locationManager startUpdatingLocation];
    }

    pragma mark ========= 获取位置 ==========

  • (void)getLocation {
    if ([CLLocationManager locationServicesEnabled]) {
      _locationManager=[[CLLocationManager alloc] init];
      _locationManager.delegate=self;
      //精度最高,耗电最大
      _locationManager.desiredAccuracy=kCLLocationAccuracyBest;
      _locationManager.distanceFilter = 200;
      [_locationManager startUpdatingLocation];
      if ([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0) {
          [_locationManager requestAlwaysAuthorization];
      }

    }
    }

pragma mark - 调用地图代理方法

  • (void)locationManager:(CLLocationManager )manager didFailWithError:(NSError )error {
    NSLog(@"%@",error);
    }
  • (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    switch (status) {

      case kCLAuthorizationStatusNotDetermined:
          if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
              [_locationManager requestAlwaysAuthorization];
          }
          break;
    
      default:
          break;

    }
    }
    //获取经纬度

  • (void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray<CLLocation > )locations {
    CLLocation
    newLocation=locations[0];
    //CLLocationCoordinate2D oldCoordinate=newLocation.coordinate;
    //NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude);
    //NSLog(@"新的经度:%f,新的纬度:%f",newLocation.coordinate.longitude,newLocation.coordinate.latitude);
    self.latitude=newLocation.coordinate.latitude;
    self.longtitude=newLocation.coordinate.longitude;
    [manager stopUpdatingLocation];

    CLGeocoder geocoder=[[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray<CLPlacemark
    > _Nullable placemarks, NSError _Nullable error) {

      for (CLPlacemark *place in placemarks) {
          self.positionName=place.name;
          self.city=place.locality;
          self.area=place.subLocality;
    
          NSLog(@"%@",self.area);
      }
    
      for (id<PositionToolDelegate>delegate in _locationArr) {
          if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) {
              [delegate noticePositionChanged];
          }
      }

    }];

    for (id<PositionToolDelegate> delegate in _locationArr) {

      if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) {
          [delegate noticePositionChanged];
      }

    }
    }

-(void)locationManager:(CLLocationManager )manager didUpdateToLocation:(CLLocation )newLocation fromLocation:(CLLocation *)oldLocation {
NSLog(@"aaa%@", @"ok");
}
`
使用时候直接在使用到的地方加入
[[PositionTool shareInfo] getLocation];

文/Mikko(简书作者)
原文链接:http://www.jianshu.com/p/39228fd5da68
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-11-06 10:32:52

地图位置定位的封装开发的相关文章

iOS开发--地图与定位

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒 店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开 发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要 实现地图.导航功能,往往需要先熟悉定位功能

iOS开发系列--地图与定位

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

转-iOS开发系列--地图与定位

来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用

iOS开发系列--地图与定位-ios8

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

Android应用中使用百度地图API定位自己的位置(二)

官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发者们提供了如下类型的地图覆盖物: 我的位置图层(MyLocationOverlay):用于显示用户当前位置的图层(支持自定义位置图标): Poi搜索结果图层(PoiOverlay):用于显示兴趣点搜索结果的图层: 路线图层(RouteOverlay):公交.步行和驾车线路图层,将公交.步行和驾车出行方案的路线及关键点显示在地图上(起.终

Android开发笔记(一百零三)地图与定位SDK

集成地图SDK 国内常用的地图SDK就是百度和高德了,二者的用法大同小异,可按照官网上的开发指南一步步来.下面是我在集成地图SDK时遇到的问题说明: 1.点击基本地图功能选项,不能打开地图,弹出"key验证出错!请在AndroidManifest.xml文件中检查key设置的"的红色字提示.查看日志提示"galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy&

iOS开发——开发实战总结OC篇&amp;地图与定位(LBS)-CoreLocation篇

地图与定位(LBS)-CoreLocation篇 一:地图与定位基本框架(MapKit时基于CoreLocation实现的夜可以实现定位) 二:开发常用技术 LBS:基于位置的服务 SoLoMo:社交,本地,移动化 三:定位授权提示(iOS之前) 四:每个一段距离定位 五:后台服务:默认只能在前台服务 plist文件中 对应plist文件的值(数组) 六:基于基站定位 七:iOS8以上的服务 前台定位 定位服务开启 开启授权 后台服务(可以不勾选后台模式) 定位服务开 开启后台授权 授权改变 /

iOS开发之地图-----01定位CoreLocation

1.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 2.在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发 Map Kit :用于地图展示 Core Location :用于地理定位 3.2个热门专业术语 LBS :Location Based Service SoLoMo :Social Local Mobile(索罗门) 2.经纬度 1.经纬度的各种定义 本初

iOS开发——开发实战总结OC篇&amp;地图与定位(LBS)-MapKit篇

地图与定位(LBS)-MapKit篇 一:MapKit基本介绍 XIB 代码 二:框架没有导入 在Xcode5之后我们不需要在工程中导入苹果的框架,也就是,苹果会自动为神马导入,但是有几个前提 1:你必须import这个框架 2:你必须在项目中使用(需要第一个条件的支持) 只要上面每个条件不满足都会报上名的错误 三:基本属性的使用 1 // 1.设置地图显示类型 2 /** 3 MKMapTypeStandard = 0, // 标准 4 MKMapTypeSatellite, // 卫星 5