产品需求
由于用户手动输入地址太过麻烦,现要求改进用户体验:新增一个定位图标,用户点击,跳转到用户地址列表页面,点击其中一条地址即可。
思路
首先需要定位用户位置,然后,根据定位坐标,进行周边搜索。
步骤及代码
关于高德地图的集成和使用,官网上有详细讲解及demo,我就不一一介绍了,总的说来,都是套路(调用方法+方法回调)。
定位
- 主动调用定位方法
//开始定位
[self.locationManager startUpdatingLocation];
- 调用定位方法时会回调位置更新代理方法,可以在这里获取到用户位置
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location
{
// 定位结果
NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
// 赋值给全局变量
self.location = location;
// 发起周边搜索
[self searchAround];
// 停止定位
[self.locationManager stopUpdatingLocation];
}
- 定位成功后以用户定位点为中心发起周边搜索(注意:type是搜索类型,要写全)
/** 根据定位坐标进行周边搜索 */
- (void)searchAround{
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
//构造AMapPOIAroundSearchRequest对象,设置周边请求参数
AMapPOIAroundSearchRequest *request = [[AMapPOIAroundSearchRequest alloc] init];
request.location = [AMapGeoPoint locationWithLatitude:self.location.coordinate.latitude longitude:self.location.coordinate.longitude];
// types属性表示限定搜索POI的类别,默认为:餐饮服务|商务住宅|生活服务
// POI的类型共分为20种大类别,分别为:
// 汽车服务|汽车销售|汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|
// 医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|
// 交通设施服务|金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施
request.types = @"汽车服务|汽车销售|汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施";
request.sortrule = 0;
request.requireExtension = YES;
NSLog(@"周边搜索");
//发起周边搜索
[self.search AMapPOIAroundSearch: request];
}
其中[self.search AMapPOIAroundSearch: request]
会回调周边搜索的代理方法
在周边搜索的代理方法中获取poi,得到tableView的数据源
// 实现POI搜索对应的回调函数
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response{
NSLog(@"周边搜索回调");
if(response.pois.count == 0)
{
return;
}
self.dataArray = [NSMutableArray arrayWithArray:response.pois];
// 周边搜索完成后,刷新tableview
[self.tableView reloadData];
// 停止旋转菊花
[CQHud dismiss];
}
APP效果动态图展示
效果图.gif后记
现在的APP大多都有地图功能,定位需要地图、查找需要地图、路径分析需要地图,不得不说,掌握地图SDK很有必要。至于怎么掌握——不要求你熟悉sdk里的所以方法,但必须很熟悉里面的一些常用的方法,比如说定位和周边搜索,其他的,你要有所了解,坦白的说就是你要知道地图sdk能实现哪些功能,这是最基本的也是特别重要的。遇到问题时,仔细查看sdk文档、看官方demo以及最重要的:官方论坛。说实话,没有哪个搜索引擎能比官方论坛更好用了,为什么?因为这里有真正的专业人员维护。
网友评论