获取地址描述数据 最后更新时间: 2021年01月22日
注意:下面介绍的功能使用的是地图SDK的搜索功能,需要在工程中导入搜索功能库(AMapSearchKit.framework)。
地理编码(地址转坐标)
地理编码基本介绍
地理编码,又称为地址匹配,是从已知的地址描述到对应的经纬度坐标的转换过程。该功能适用于根据用户输入的地址确认用户具体位置的场景,常用于配送人员根据用户输入的具体地址找地点。
地址的定义: 首先,地址肯定是一串字符,内含国家、省份、城市、城镇、乡村、街道、门牌号码、屋邨、大厦等建筑物名称。按照由大区域名称到小区域名称组合在一起的字符。一个有效的地址应该是独一无二的。注意:针对大陆、港、澳地区的地理编码转换时可以将国家信息选择性的忽略,但省、市、城镇等级别的地址构成是不能忽略的。
注意:不要将该功能与POI关键字搜索混用。
- POI关键字搜索,是根据关键词找到现实中存在的地物点(POI)。
- 地理编码是依据当前输入,根据标准化的地址结构(省/市/区或县/乡/村或社区/商圈/街道/门牌号/POI)进行各个地址级别的匹配,以确认输入地址对应的地理坐标,只有返回的地理坐标匹配的级别为POI,才会对应一个具体的地物(POI)。
使用地理编码
第 1 步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件。
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
第 2 步,配置Key
在使用搜索功能时,需要添加 Key。
如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:
iOS 搜索功能 v4.x 版本设置 Key:
[AMapServices sharedServices].apiKey = @"您的key";
AMapServices.shared().apiKey = "您的Key"
如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新。
iOS 搜索功能 v3.x 版本设置 Key:
[AMapSearchServices sharedServices].apiKey = @"您的key";
AMapSearchServices.shared().apiKey = "您的Key"
第 3 步,定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>。
第 4 步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理。
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
search = AMapSearchAPI()
search.delegate = self
第 5 步,设置地理编码查询参数
地理编码,请求参数类为 AMapGeocodeSearchRequest,address是必设参数。
AMapGeocodeSearchRequest *geo = [[AMapGeocodeSearchRequest alloc] init];
geo.address = @"北京市朝阳区阜荣街10号";
let request = AMapGeocodeSearchRequest()
request.address = "北京市朝阳区阜荣街10号"
第 6 步,发起地理编码查询
调用 AMapSearchAPI 的 AMapGeocodeSearch 并发起地理编码。
[self.search AMapGeocodeSearch:geo];
search.aMapGeocodeSearch(request)
第 7 步,在回调中处理数据
当地理编码查询成功时,会进到 onGeocodeSearchDone 回调函数中,通过解析 AMapGeocodeSearchResponse 把检索结果在地图上绘制点展示出来。
说明:
1)可以在回调中解析 response,获取地址对应的地理信息。
2)通过 response.geocodes 可以获取到 AMapGeocode 列表,POI 详细信息可参考 AMapGeocode 类。
- (void)onGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapGeocodeSearchResponse *)response
{
if (response.geocodes.count == 0)
{
return;
}
//解析response获取地理信息,具体解析见 Demo
}
func onGeocodeSearchDone(_ request: AMapGeocodeSearchRequest!, response: AMapGeocodeSearchResponse!) {
if response.geocodes == nil {
return
}
//解析response获取地理信息,具体解析见 Demo
}
逆地理编码(坐标转地址)
逆地理编码基本介绍
逆地理编码,又称地址解析服务,是指从已知的经纬度坐标到对应的地址描述(如行政区划、街区、楼层、房间等)的转换。常用于根据定位的坐标来获取该地点的位置详细信息,与定位功能是黄金搭档。
使用逆地理编码
第 1 步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件。
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
第 2 步,配置Key
在使用搜索功能时,需要添加 Key。
如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:
iOS 搜索功能 v4.x 版本设置 Key:
[AMapServices sharedServices].apiKey = @"您的key";
AMapServices.shared().apiKey = "您的Key"
如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新。
iOS 搜索功能 v3.x 版本设置 Key:
[AMapSearchServices sharedServices].apiKey = @"您的key";
AMapSearchServices.shared().apiKey = "您的Key"
第 3 步,定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>。
第 4 步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理。
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
search = AMapSearchAPI()
search.delegate = self
第 5 步,设置逆地理编码查询参数
进行逆地编码时,请求参数类为 AMapReGeocodeSearchRequest,location为必设参数。
AMapReGeocodeSearchRequest *regeo = [[AMapReGeocodeSearchRequest alloc] init];
regeo.location = [AMapGeoPoint locationWithLatitude:coordinate.latitude longitude:coordinate.longitude];
regeo.requireExtension = YES;
let request = AMapReGeocodeSearchRequest()
request.location = AMapGeoPoint.location(withLatitude: CGFloat(coordinate.latitude), longitude: CGFloat(coordinate.longitude))
request.requireExtension = true
第 6 步,发起逆地理编码查询
调用 AMapSearchAPI 的 AMapReGoecodeSearch 并发起逆地理编码。
[self.search AMapReGoecodeSearch:regeo];
search.aMapReGoecodeSearch(request)
第 7 步,在回调中处理数据
当逆地理编码成功时,会进到 onReGeocodeSearchDone 回调函数中,通过解析 AMapReGeocodeSearchResponse 获取这个点的地址信息(包括:标准化的地址、附近的POI、面区域 AOI、道路 Road等)。
1)可以在回调中解析 response,获取地址信息。
2)通过 response.regeocode 可以获取到逆地理编码对象 AMapReGeocode。
3)通过 AMapReGeocode.formattedAddress 返回标准化的地址,AMapReGeocode.addressComponent 返回地址组成要素,包括:省名称、市名称、区县名称、乡镇街道等。
4)AMapReGeocode.roads 返回地理位置周边的道路信息。
5)AMapReGeocode.pois 返回地理位置周边的POI(大型建筑物,方便定位)。
6)AMapReGeocode.aois 返回地理位置所在的AOI(兴趣区域)。
/* 逆地理编码回调. */
- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response
{
if (response.regeocode != nil)
{
//解析response获取地址描述,具体解析见 Demo
}
}
func onReGeocodeSearchDone(_ request: AMapReGeocodeSearchRequest!, response: AMapReGeocodeSearchResponse!) {
if response.regeocode == nil {
return
}
//解析response获取地址描述,具体解析见 Demo
}
说明
当检索失败时,会进入 didFailWithError 回调函数,通过该回调函数获取产生的失败的原因。
- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
{
NSLog(@"Error: %@", error);
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
print("Error:\(error)")
}