系统地图 API 位置提示搜索
最近需要做一个带有位置搜索功能的界面,具体需求就是输入一个位置,能够自动联想出一串与之匹配的地名,供用户选择。在实际应用中,有许多APP都具有此类功能,比如微信朋友圈或者QQ空间的状态的位置,可以自动定位或手动输入,手动输入的时候会根据输入文字的变化,展示一个位置列表。
想实现这个功能,且不导入第三方的SDK(如果导入第三方地图SDK,会使应用安装包增加10M左右),使用iOS系统自带的高德地图API就能够轻松办到。
首先,导入MapKit
框架
#import <MapKit/MapKit.h>
如果用不到MapKit
框架中其他的API的话,可以单独导入以下框架
#import <MapKit/MKLocalSearch.h>
#import <MapKit/MKLocalSearchRequest.h>
#import <MapKit/MKLocalSearchResponse.h>
然后在输入文字变化所调用的方法里,实现下列关键方法
//创建搜索请求对象
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc]init];
//把文字赋值给这个自然语言查询的属性,我为了方便演示,在这里写死了一个值
request.naturalLanguageQuery = @"财富广场";
//创建搜索对象
MKLocalSearch *localSearch = [[MKLocalSearch alloc]initWithRequest:request];
__weak __typeof (&*self) weakSelf = self;
//开始搜索的回调方法
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (error) {
//do something
}else{
//遍历结果数组
[response.mapItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//位置对象,包含地理位置的名称、地址、经纬度等详细信息,根据需要获取具体值
MKMapItem *mapItem = obj;
//以下为我实现列表展示功能所写的代码
JXLMapResultModel *model = [JXLMapResultModel new];
model.name = mapItem.name;
[weakSelf.modelArray addObject:model];
if (response.mapItems.count == idx + 1) {
[weakSelf.tableView reloadData];
}
}];
}
}];
最终可以实现这样的效果
