开发 iOS 地图SDK 开发指南 获取地图数据 获取地址描述数据

获取地址描述数据 最后更新时间: 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 步,设置地理编码查询参数

地理编码,请求参数类为 AMapGeocodeSearchRequestaddress是必设参数。

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 步,设置逆地理编码查询参数

进行逆地编码时,请求参数类为 AMapReGeocodeSearchRequestlocation为必设参数。

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)")
}
返回顶部 示例中心 常见问题 智能客服 公众号
二维码