iOS关于高德地图定位和热点搜索使用小结

最近项目刚刚忙完,有空整理一下用到的相关技术点。地图是比较常见的功能模块,现在用的比较多的是地图当前位置显示,公交、骑行、步行路线信息,附近热点位置搜索。现在国内用的比较多的是高德、百度,国外的话可以用谷歌、腾讯。路线信息的内容之前博文里面有所提及,本文以高德地图为例,主要介绍一下其他两点。

1、pod导入相应的地图库,添加引用和协议

#import <MAMapKit/MAMapKit.h>

      #import <AMapFoundationKit/AMapFoundationKit.h>

      #import <AMapLocationKit/AMapLocationKit.h>

      #import <AMapSearchKit/AMapSearchKit.h>

<MAMapViewDelegate,AMapLocationManagerDelegate,AMapSearchDelegate>

2、定义地图、地图管理变量,热点搜索,经纬度信息变量

/**

高德地图

*/

@property (nonatomic,strong) MAMapView *mapView;

/**

定位管理

*/

@property (nonatomic,strong) AMapLocationManager *locService;

/**

用户当前位置

*/

@property (nonatomic,strong) MAPointAnnotation *curAnnotation;

/**

周边检索

*/

@property (nonatomic,strong) AMapSearchAPI *poiSearch;

/**

周边检索条件

*/

@property (nonatomic,strong) AMapPOIAroundSearchRequest *placeAround;

3、实例化相关变量,并开启定位

-(void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];



self.mapView.delegate    = self;

self.locService.delegate = self;

self.poiSearch.delegate  = self;

}

-(void)viewWillDisappear:(BOOL)animated{

[super viewWillDisappear:animated];



[self.mapView removeAnnotation:self.curAnnotation];

self.curAnnotation = nil;

self.mapView.delegate    = nil;

self.locService.delegate = nil;

self.poiSearch.delegate  = nil;

}

-(void)viewDidAppear:(BOOL)animated{

[super viewDidAppear:animated];

//    self.locService.delegate = self;

[self.locService startUpdatingLocation];

}

pragma mark - 懒加载

-(MAMapView *)mapView{

if (!_mapView) {

    _mapView = [[MAMapView alloc]initWithFrame:self.mapBackView.bounds];

    [_mapView setMapType:MAMapTypeStandard];

    _mapView.showsCompass = NO;

    [_mapView setZoomLevel:16];

}

return _mapView;

}

-(AMapLocationManager *)locService{

if (!_locService) {

    _locService = [[AMapLocationManager alloc] init];

    //设置不允许系统暂停定位

    [_locService setPausesLocationUpdatesAutomatically:NO];

    //设置允许在后台定位

    [_locService setAllowsBackgroundLocationUpdates:YES];

    //设置允许连续定位逆地理

    [_locService setLocatingWithReGeocode:YES];

}

return _locService;

}

-(AMapSearchAPI *)poiSearch{

if (!_poiSearch) {

    _poiSearch = [[AMapSearchAPI alloc]init];

}

return _poiSearch;

}

-(AMapPOIAroundSearchRequest *)placeAround{

if (!_placeAround) {

    _placeAround = [[AMapPOIAroundSearchRequest alloc]init];

    _placeAround.radius = 1500;

    _placeAround.offset = 10;

    _placeAround.keywords = @"";

    _placeAround.sortrule            = 0;

    _placeAround.requireExtension    = YES;

    _placeAround.types = @"220000|070700|120000|110000|160000|060000|170000|130000|150900|080304|141200";

    //,事物,会议,大厦,公寓,广场,银行,商场,学校,停车场,酒吧

}

return _placeAround;

}

-(void)viewDidLoad {

[super viewDidLoad];

[AMapServices sharedServices].enableHTTPS = YES;

[self createSubviews];

}

4、地图位置解析,设置地图上的当前经纬度信息,然后关闭定位,搜索周边热点位置

-(void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode{

if (location) {

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    WS(weakSelf)

    [geocoder reverseGeocodeLocation:[[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude] completionHandler:^(NSArray *placemarks, NSError *error){

        if (error) {

            weakSelf.errorLabel.hidden = NO;

            [CCErrorView showErrorWithText:K_CC_LOCAL_STR(@"location.error")];

        }else{

            if (placemarks.count>0) {

                if (weakSelf.curAnnotation) {

                    [weakSelf.mapView removeAnnotation:weakSelf.curAnnotation];

                    weakSelf.curAnnotation = nil;

                }

                weakSelf.errorLabel.hidden = YES;

                weakSelf.curAnnotation = [[MAPointAnnotation alloc]init];

                weakSelf.curAnnotation.coordinate = location.coordinate;

                CLPlacemark *placemark = [placemarks objectAtIndex:0];

                NSDictionary *addressDic = placemark.addressDictionary;

                NSString *address = [[addressDic objectForKey:@"FormattedAddressLines"] firstObject];

                

                if (K_CC_EMPTY_STR(address)) {

                    address = @"";

                }

                if (!K_CC_EMPTY_STR(addressDic[@"Country"])) {

                    address = [address stringByReplacingOccurrencesOfString:[addressDic objectForKey:@"Country"]  withString:@""];

                }

                

                weakSelf.curAnnotation.title = address;

                weakSelf.curStreet = [addressDic objectForKey:@"Name"];

                weakSelf.curProvince = [addressDic objectForKey:@"State"];

                weakSelf.curCity = [addressDic objectForKey:@"City"];

                weakSelf.curArea = [addressDic objectForKey:@"SubLocality"];

                

                [weakSelf.datalist removeAllObjects];

                CCSignInModel *model = [[CCSignInModel alloc]init];

                model.name = [addressDic objectForKey:@"Name"];

                model.address = address;

                model.location =location.coordinate;

                model.curCity = [addressDic objectForKey:@"City"];

                model.curArea = [addressDic objectForKey:@"SubLocality"];

                model.curStreet = [addressDic objectForKey:@"Name"];

                [weakSelf.datalist addObject:model];

                weakSelf.curModel = model;

                

                [weakSelf.listTableView reloadData];

            }else{

                weakSelf.errorLabel.hidden = NO;

                [CCErrorView showErrorWithText:K_CC_LOCAL_STR(@"location.error")];

            }

            

            [weakSelf.mapView setCenterCoordinate:location.coordinate animated:NO];

            [weakSelf.mapView addAnnotation:weakSelf.curAnnotation];

            [weakSelf.mapView selectAnnotation:weakSelf.curAnnotation animated:YES];

            [weakSelf.locService stopUpdatingLocation];

            

            AMapGeoPoint *centerPoint = [AMapGeoPoint locationWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];

            

            [weakSelf.placeAround setLocation:centerPoint];

            

            [weakSelf.poiSearch AMapPOIAroundSearch:weakSelf.placeAround];

        }

    }];

    

}else{

    self.errorLabel.hidden = NO;

}

}

pragma mark - AMapSearchDelegate

-(void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error

{

NSLog(@"Error: %@ ", error);

if (self.datalist.count>0 && self.placeAround.page!=1) {

    [self.listTableView.mj_footer endRefreshingWithNoMoreData];

}



[self.listTableView reloadData];

}

-(void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response

{

[self.listTableView.mj_footer endRefreshing];

if (response.pois.count>0) {

    for (AMapCloudPOI *info in response.pois) {

        

        CCSignInModel *model = [[CCSignInModel alloc]init];

        model.name     = info.name;

        model.address  = info.address;

        model.curCity = self.curCity;

        model.curArea = self.curArea;

        model.curStreet = self.curStreet;

        model.location = CLLocationCoordinate2DMake(info.location.latitude,info.location.longitude);

        [self.datalist addObject:model];

    }

    if (response.pois.count == 10 && self.placeAround.page == 1) {

        @K_CC_WEAK(self)

        self.listTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{

            @K_CC_STRONG(self)

            self.placeAround.page++;

            [self.poiSearch AMapPOIAroundSearch:self.placeAround];

        }];

    }else if(response.pois.count < 10 && self.placeAround.page != 1){

        [self.listTableView.mj_footer endRefreshingWithNoMoreData];

    }

}else{

    if (self.placeAround.page == 1 && self.datalist.count == 0) {

        [CCNoDataView nodataViewShowWithTableView:self.listTableView isShow:YES];

    }

}



[self.listTableView reloadData];

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,283评论 6 530
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,947评论 3 413
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,094评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,485评论 1 308
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,268评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,817评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,906评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,039评论 0 285
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,551评论 1 331
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,502评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,662评论 1 366
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,188评论 5 356
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,907评论 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,304评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,563评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,255评论 3 389
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,637评论 2 370

推荐阅读更多精彩内容