示例中心
功能在线体验
控制台

高德 开发 iOS 地图SDK 开发指南 获取地图数据 获取业务数据(云图功能)

更新时间:2017年07月20日

注意:下面介绍的功能使用的是地图SDK的搜索功能,需要在工程中导入搜索功能库(AMapSearchKit.framework)

简介

开发检索业务数据的步骤:

第 1 步,数据存储。开发者需要将待检索数据存入云图,并对要检索的字段建立索引管理。

第 2 步,检索。利用SDK为开发者提供的接口检索自己的数据。

第 3 步,展示。开发者可根据自己的实际需求以多种形式(如结果列表、地图模式等)展现自己的数据。

SDK中提供的四种云检索接口的参数关系如下图:

本地检索

在某数据表中,指定城市(全国/省/市/区县)范围,搜索符合查询条件的数据,并按照给定排序规则返回结果。其中全国等同于对该数据表全表数据进行检索。

进行本地检索的步骤如下:

第 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 步,设置本地检索参数

本地检索的请求参数对象为 AMapCloudPOILocalSearchRequest ,其中:keywordscity 参数为必填参数,当 city 传入 "全国" 时,表示在全表进行检索。

AMapCloudPOILocalSearchRequest *placeLocal = [[AMapCloudPOILocalSearchRequest alloc] init];
[placeLocal setTableID:(NSString *)TableID];
[placeLocal setCity:kCloudSearchCity];
[placeLocal setKeywords:@""];

//  NSArray *filters = [[NSArray alloc] initWithObjects:@"name:1",nil];
//  [placeLocal setFilter:filters]; 
//  NSArray *filters = [[NSArray alloc] initWithObjects:@"_id:[1,100]",@"type:2",nil];  
//  [placeLocal setFilter:filters];
let request = AMapCloudPOILocalSearchRequest()
request.tableID = TableID
request.offset = 50
        
request.city = "北京"
request.keywords = ""

第 6 步,发起本地检索

调用 AMapSearchAPI 的 AMapCloudPOILocalSearch 方法进行本地检索。

[self.search AMapCloudPOILocalSearch:placeLocal];
search.aMapCloudPOILocalSearch(request)

第 7 步,在回调中处理数据

当检索成功时,会进入 onCloudSearchDone 回调函数,通过该函数将检索出来的业务数据以绘制点的方式显示在地图上。

说明:

1)可以在回调中解析 response,获取云图点数据。

2)response.POIs 可以获取到 AMapCloudPOI 列表,云图点的详细信息可参考 AMapCloudPOI 类。

- (void)onCloudSearchDone:(AMapCloudSearchBaseRequest *)request response:(AMapCloudPOISearchResponse *)response
{
    
    //解析response获取云图点信息,具体解析见 Demo
}
func onCloudSearchDone(_ request: AMapCloudSearchBaseRequest!, response: AMapCloudPOISearchResponse!) {

    if response.count == 0 {
        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 步,设置周边搜索请求参数

周边检索的请求参数对象为 AMapCloudPOIAroundSearchRequest ,其中:center 参数为必填参数。

AMapCloudPOIAroundSearchRequest *placeAround = [[AMapCloudPOIAroundSearchRequest alloc] init];
[placeAround setTableID:(NSString *)TableID];

[placeAround setRadius:RADIUS];

AMapGeoPoint *centerPoint = [AMapGeoPoint locationWithLatitude:39.880172 longitude:116.410588];

[placeAround setCenter:centerPoint];

[placeAround setKeywords:@""];

//过滤条件数组filters的含义等同于SQL语句:WHERE _address = "北京" AND _id BETWEEN 1 AND 20
NSArray *filters = [[NSArray alloc] initWithObjects:@"_id:[1,20]", @"_address:北京",nil];
[placeAround setFilter:filters];

[placeAround setSortFields:@"_id"];
[placeAround setSortType:AMapCloudSortTypeDESC];
 
[placeAround setOffset:0];
//  [placeAround setPage:1];
let request = AMapCloudPOIAroundSearchRequest()
request.tableID = TableID
        
request.center = AMapGeoPoint.location(withLatitude: CGFloat(39.880172), longitude: CGFloat(116.410588))
request.keywords = ""

第 6 步,发起周边检索

调用 AMapSearchAPI 的 AMapCloudPOIAroundSearch 方法进行周边检索。

[self.search AMapCloudPOIAroundSearch:placeAround];
search.aMapCloudPOIAroundSearch(request)

第 7 步,在回调中处理数据

当检索成功时,会进入 onCloudSearchDone 回调函数,通过该函数将检索出来的业务数据以绘制点的方式显示在地图上。

说明:

1)可以在回调中解析 response,获取云图点数据。

2)response.POIs 可以获取到 AMapCloudPOI 列表,云图点的详细信息可参考 AMapCloudPOI 类。

- (void)onCloudSearchDone:(AMapCloudSearchBaseRequest *)request response:(AMapCloudPOISearchResponse *)response
{
    
    //解析response获取云图点信息,具体解析见 Demo
}
func onCloudSearchDone(_ request: AMapCloudSearchBaseRequest!, response: AMapCloudPOISearchResponse!) {

    if response.count == 0 {
        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 步,设置多边形检索参数

多边形检索的请求参数对象为 AMapCloudPOIPolygonSearchRequest ,其中:polygon 参数为必填参数。

AMapCloudPOIPolygonSearchRequest *placePolygon = [[AMapCloudPOIPolygonSearchRequest alloc] init];
[placePolygon setTableID:(NSString *)TableID];

NSMutableArray *points = [[NSMutableArray alloc] initWithCapacity:0];
AMapGeoPoint *point1 = [AMapGeoPoint locationWithLatitude:39.941711 longitude:116.382248];
AMapGeoPoint *point2 = [AMapGeoPoint locationWithLatitude:39.884882 longitude:116.359566];
AMapGeoPoint *point3 = [AMapGeoPoint locationWithLatitude:39.878120 longitude:116.437630];
[points addObject:point1];
[points addObject:point2];
[points addObject:point3];
[points addObject:point1];
[placePolygon setPolygon:[AMapGeoPolygon polygonWithPoints:points]];
[placePolygon setOffset:50];
let request = AMapCloudPOIPolygonSearchRequest()
request.tableID = TableID

let points: [AMapGeoPoint] = [AMapGeoPoint.location(withLatitude: CGFloat(39.941711), longitude: CGFloat(116.382248)),
                                   AMapGeoPoint.location(withLatitude: CGFloat(39.884882), longitude: CGFloat(116.359566)),
                                   AMapGeoPoint.location(withLatitude: CGFloat(39.878120), longitude: CGFloat(116.437630)),
                                   AMapGeoPoint.location(withLatitude: CGFloat(39.878120), longitude: CGFloat(116.437630))]

request.polygon = AMapGeoPolygon.init(points: points)

第 6 步,发起多边形检索

调用 AMapSearchAPI 的 AMapCloudPOIPolygonSearch 方法进行多边形检索。

[self.search AMapCloudPOIPolygonSearch:placePolygon];
search.aMapCloudPOIPolygonSearch(request)

第 7 步,在回调中处理数据

当检索成功时,会进入 onCloudSearchDone 回调函数,通过该函数将检索出来的业务数据以绘制点的方式显示在地图上。

说明:

1)可以在回调中解析 response,获取云图点数据。

2)response.POIs 可以获取到 AMapCloudPOI 列表,云图点的详细信息可参考 AMapCloudPOI 类。

- (void)onCloudSearchDone:(AMapCloudSearchBaseRequest *)request response:(AMapCloudPOISearchResponse *)response
{
    
    //解析response获取云图点信息,具体解析见 Demo
}
func onCloudSearchDone(_ request: AMapCloudSearchBaseRequest!, response: AMapCloudPOISearchResponse!) {

    if response.count == 0 {
        return
    }
    
    //解析response获取云图点信息,具体解析见 Demo
}

根据业务数据的 ID 检索

在某数据表中,根据数据_id查询一条数据。

第 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 步,设置 ID 检索参数

ID 检索的请求参数对象为 AMapCloudPOIIDSearchRequest ,其中:uid 参数为必填参数。

AMapCloudPOIIDSearchRequest *placeID = [[AMapCloudPOIIDSearchRequest alloc] init];
[placeID setTableID:(NSString *)TableID];
[placeID setUid:kCloudSearchPOIID];
let request = AMapCloudPOIIDSearchRequest()
request.tableID = TableID
request.uid = kCloudSearchPOIID

第 6 步,发起 ID 检索

调用 AMapSearchAPI 的 AMapCloudPOIAroundSearch 方法进行ID检索。

[self.search AMapCloudPOIIDSearch:placeID];
search.aMapCloudPOIIDSearch(request)

第 7 步,在回调中处理数据

当检索成功时,会进入 onCloudSearchDone 回调函数,通过该函数将检索出来的业务数据以绘制点的方式显示在地图上。

说明:

1)可以在回调中解析 response,获取云图点数据。

2)response.POIs 可以获取到 AMapCloudPOI 列表,云图点的详细信息可参考 AMapCloudPOI 类。

- (void)onCloudSearchDone:(AMapCloudSearchBaseRequest *)request response:(AMapCloudPOISearchResponse *)response
{
    
    //解析response获取云图点信息,具体解析见 Demo
}
func onCloudSearchDone(_ request: AMapCloudSearchBaseRequest!, response: AMapCloudPOISearchResponse!) {

    if response.count == 0 {
        return
    }
    
    //解析response获取云图点信息,具体解析见 Demo
}

说明

当检索失败时,会进入 didFailWithError 回调函数,通过该回调函数获取产生的失败的原因。

- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
{
    NSLog(@"Error: %@", error);
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
    print("Error:\(error)")
}
移动端
示例中心
功能
在线体验
常见问题