最近的项目的功能中涉及到了地点的选择,需求上只需要搜索出具体的地名即可。当前项目只是应用于国内,也需要一个明确的地点名字供用户选择,这里就首选了第三方SDK,并选择了高德地图。第一件事那便是要到高德开放平台去阅读官方文档。里面写得很详细,并且提供了OC和Swift两种用法和示例代码。分析一下项目的需求,明确目标,我们主要是通过高德地图的搜索POI点来获取具体的地名。之后就是跟着文档去部署和一步一步实现定位和搜索。
整体还是挺简单的,这里就列几个需要注意的地方。
一、使用高德地图的单次定位时候,如果需要获取逆地理信息,调用下面的方法的时候要传true(官方文档代码示例是不带有你地址信息的示例)
/**
* @brief 单次定位。如果当前正在连续定位,调用此方法将会失败,返回NO。\n该方法将会根据设定的 desiredAccuracy 去获取定位信息。如果获取的定位信息精确度低于 desiredAccuracy ,将会持续的等待定位信息,直到超时后通过completionBlock返回精度最高的定位信息。\n可以通过 stopUpdatingLocation 方法去取消正在进行的单次定位请求。
* @param withReGeocode 是否带有逆地理信息(获取逆地理信息需要联网)
* @param completionBlock 单次定位完成后的Block
* @return 是否成功添加单次定位Request
*/
- (BOOL)requestLocationWithReGeocode:(BOOL)withReGeocode completionBlock:(AMapLocatingCompletionBlock)completionBlock;
二、使用POI周边请求的时候,除了要看AMapPOIAroundSearchRequest的属性之外,还要去看他的父类AMapPOISearchBaseRequest的属性。正常情况下搜索获取到的AMapPOI对象是很多的,服务器做了分页,我们移动端在显示的时候也需要做分页。
///POI搜索请求基类
@interface AMapPOISearchBaseRequest : AMapSearchObject
///类型,多个类型用“|”分割 可选值:文本分类、分类代码
@property (nonatomic, copy) NSString *types;
///排序规则, 0-距离排序;1-综合排序, 默认0
@property (nonatomic, assign) NSInteger sortrule;
///每页记录数, 范围1-50, [default = 20]
@property (nonatomic, assign) NSInteger offset;
///当前页数, 范围1-100, [default = 1]
@property (nonatomic, assign) NSInteger page;
///建筑物POI编号,传入建筑物POI之后,则只在该建筑物之内进行搜索 since 4.5.0
@property (nonatomic, copy) NSString *building;
///是否返回扩展信息,默认为 NO。
@property (nonatomic, assign) BOOL requireExtension;
///是否返回子POI,默认为 NO。
@property (nonatomic, assign) BOOL requireSubPOIs;
@end
///POI周边搜索
@interface AMapPOIAroundSearchRequest : AMapPOISearchBaseRequest
///查询关键字,多个关键字用“|”分割
@property (nonatomic, copy) NSString *keywords;
///中心点坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///查询半径,范围:0-50000,单位:米 [default = 3000]
@property (nonatomic, assign) NSInteger radius;
@end
三、按照关键字搜索POI时,需要在请求中设置城市,否则是按综合排序显示的。我们可以帮用户定位获取城市名,再给他一个选择其他城市的列表。
Demo的效果如下:
高德地图的官方文档写得很清楚,加上头文件都带上了中文的注释用起来还是比较方便快捷的。在这个小demo中主要还是积累了看文档的经验,还有一点点注意事项(看文档写不能着急,一定要先看清楚了QAQ)...