地理/逆地理编码
地理编码
1. 导入头文件
#import <NavinfoKit/NavinfoKit.h>
2. 配置APIKEY
参考工程配置说明。
3. 定义 NavinfoGeocodeSearch
定义地理与逆地理编码搜索对象 NavinfoGeocodeSearch,并继承搜索协议<NavinfoGeocodeSearchDelegate >。
4. 构造 NavinfoGeocodeSearch
构造地理与逆地理编码搜索对象 NavinfoGeocodeSearch
_geocoder = [NavinfoGeocodeSearch new]; _geocoder.delegate = self;
5. 设置地理编码搜索查询参数
地理编码查询的请求参数类为NavinfoGeocodeQuery,formattedAddress(格式化地址)为必填写参数,规则遵循:国家、省份、城市、区县、城镇、乡村、街道、门牌号码、屋邨、大厦。如:北京市东直门南大街 10号;cityName(城市名称)搜索行政区域的 adcode/名称,默认 110000; 其它非必要参数请参考API文档。
NavinfoGeocodeQuery *query = [[NavinfoGeocodeQuery alloc] init]; query.formattedAddress = @"腾飞软件园区汇贤园1号"; query.cityName = @"大连";
6. 发起搜索查询参数
通过调用 NavinfoGeocodeSearch的 geocodeWithQuery方法发起搜索请求。
[_geocoder geocodeWithQuery:query];
7. 在回调中处理数据
当查询成功时,代理方法。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch * _Nonnull)geocoder geocodeResult:(NavinfoGeocodeResult * _Nonnull)result;
其中NavinfoGeocodeResult返回此时可获取查询结果。
说明:
1) 通过 geocoder 获取地理、逆地理编码实例。
2) 通过 result.geoInfo 获取地理编码信息。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch *)geocoder geocodeResult:(NavinfoGeocodeResult *)result { NSLog(@"----> geocoderesult: lonlat=%@, score=%f", [NavinfoLonlat toSringWithLonlats:@[result.geoInfo.lonlat]], result.geoInfo.score); }
8. 处理失败查询
当检索失败时,Error 会返回,通过该回调函数获取产生的失败的原因。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch * _Nonnull)geocoder error:(NSError * _Nonnull)error;
其中Error 会返回,通过该回调函数获取产生的失败的原因。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch *)geocoder error:(NSError *)error { NSLog(@"----> error"); }
逆地理编码
1. 导入头文件
#import <NavinfoKit/NavinfoKit.h>
2. 配置APIKEY
参考工程配置说明。
3. 定义 NavinfoGeocodeSearch
定义地理与逆地理编码搜索对象 NavinfoGeocodeSearch,并继承搜索协议<NavinfoGeocodeSearchDelegate >。
4. 构造 NavinfoGeocodeSearch
构造地理与逆地理编码搜索对象 NavinfoGeocodeSearch,并设置代理。
_geocoder = [NavinfoGeocodeSearch new]; _geocoder.delegate = self;
5. 设置逆地理编码搜索查询参数
地理编码查询的请求参数类为 NavinfoReGeocodeQuery,lonlats(经纬度坐标集合)为必填写参数,最大支持 10 组坐标,超出部分不作处理;requirePOI(是否召回附近的POI信息) 非必填参数;requireRoad(是否召回附近的道路信息) 非必填参数;其它非必要参数请参考API文档。
NavinfoReGeocodeQuery *query = [NavinfoReGeocodeQuery new]; NavinfoLonlat *lonlat1 = [[NavinfoLonlat alloc] initWith:11648149 latitude:3999046 gbType: NavinfoGbTypeG02]; query.lonlats = @[lonlat1]; query.requirePOI = YES; query.requireRoad = YES;
6. 发起搜索查询参数
通过调用 NavinfoGeocodeSearch的 reverseGeocodeWithQuery方法发起搜索请求。
[_geocoder reverseGeocodeWithQuery:query];
7. 在回调中处理数据
当查询成功时,代理方法
- (void)onGeocodeSearch:(NavinfoGeocodeSearch * _Nonnull)geocoder geocodeResult:(NavinfoGeocodeResult * _Nonnull)result;
其中NavinfoGeocodeResult返回此时可获取查询结果。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch *)geocoder geocodeResult:(NavinfoGeocodeResult *)result { NSLog(@"----> geocoderesult: lonlat=%@, score=%f", [NavinfoLonlat toSringWithLonlats:@[result.geoInfo.lonlat]], result.geoInfo.score); }
说明:
1) 通过 geocoder 获取地理、逆地理编码实例。
2) 通过 result.lonlat 获取经纬度信息。
3) 通过 result.formattedAddress 获取格式化地址信息。
4) 通过 result.address 获取 NavinfoAddressInfo 详细地址集合。
5) 通过 result.roads 获取 NavinfoRoadInfo 附近道路信息集合。
6) 通过 result.pois 获取 NavinfoPOI 附近POI信息集合。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch *)geocoder reGeocodeResult:(NavinfoReverseGeocodeResult *)result { NSLog(@"----> reGeocodeResult"); if (result.lonlat) { NSString *lonlatStr = result.lonlat.lonlatString; NSString *fAddress = result.formattedAddress; NSString *adCountry = result.address.country; NSString *adProvince = result.address.province; NSString *adCity = result.address.city; NSString *adAdcode = result.address.adcode; NSLog(@"----> reGeocodeResult: lonlat=%@, formattedAddress=%@, adCountry=%@, adProvince=%@, adCity=%@, adAdcode=%@", lonlatStr, fAddress, adCountry, adProvince, adCity, adAdcode); if (result.roads) { NSArray *roads = result.roads; for (NSInteger i = 0; i < [roads count]; i++) { NavinfoRoadInfo *roadInfo = roads[i]; NSString *roadName = roadInfo.name; NSString *distance = roadInfo.distance; NSString *direction = roadInfo.direction; NSString *lonlatSrt = roadInfo.lonlat.lonlatString; NSLog(@"----> reGeocodeResult.roadInfo: roadName=%@, distance=%@, direction=%@, lonlatSrt=%@", roadName, distance, direction, lonlatSrt); } } if (result.pois) { NSArray *pois = result.pois; for (NSInteger i = 0; i < [pois count]; i++) { NavinfoPOI *poiInfo = pois[i]; NSString *pId = poiInfo.poiId; NSString *name = poiInfo.name; NSString *type = poiInfo.type; NSString *distance = poiInfo.distance; NSString *direction = poiInfo.direction; NSString *address = poiInfo.address; NSString *lonlatStr = poiInfo.lonlat.lonlatString; NSLog(@"----> reGeocodeResult.poiInfo: pId=%@, name=%@, type=%@, distance=%@, direction=%@, address=%@, lonlatStr=%@", pId, name, type, distance, direction, address, lonlatStr); } } } }
8. 处理失败查询
当检索失败时,Error 会返回,通过该回调函数获取产生的失败的原因。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch * _Nonnull)geocoder error:(NSError * _Nonnull)error;
其中Error 会返回,通过该回调函数获取产生的失败的原因。
- (void)onGeocodeSearch:(NavinfoGeocodeSearch *)geocoder error:(NSError *)error { NSLog(@"----> error"); }