300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用高德地图获取对应城市下区的经纬度信息

使用高德地图获取对应城市下区的经纬度信息

时间:2020-03-20 22:01:17

相关推荐

使用高德地图获取对应城市下区的经纬度信息

需求:根据城市名获取对应城市下区的经纬度信息,然后根据对应区具体的经纬度插入大头针视图。

好比如:当前是上海,那么我就需要,黄浦区,宝山区等区的经纬度信息。功能的实现非常简单,高德已经提供了相应的代码如下:当然,也可以看官方开发平台这里:/api/ios-sdk/guide/searchkit/#t6

#import <AMapSearchKit/AMapSearchKit.h>@interfaceViewController ()<AMapSearchDelegate>{AMapSearchAPI *_search;}@end-(void)viewDidLoad{//初始化检索对象_search = [[AMapSearchAPI alloc] init];_search.delegate = self;//构造AMapDistrictSearchRequest对象,keywords为必选项AMapDistrictSearchRequest *districtRequest = [[AMapDistrictSearchRequest alloc] init];districtRequest.keywords = @"北京市直辖市";districtRequest.requireExtension = YES;//发起行政区划查询[_search AMapDistrictSearch:districtRequest];}//实现行政区划查询的回调函数- (void)onDistrictSearchDone:(AMapDistrictSearchRequest *)request response:(AMapDistrictSearchResponse *)response{NSLog(@"response: %@", response);[self handleDistrictResponse:response];}- (void)handleDistrictResponse:(AMapDistrictSearchResponse *)response{if (response == nil){return;}//通过AMapDistrictSearchResponse对象处理搜索结果for (AMapDistrict *dist in response.districts){MAPointAnnotation *poiAnnotation = [[MAPointAnnotation alloc] init];poiAnnotation.coordinate = CLLocationCoordinate2DMake(dist.center.latitude, dist.center.longitude);poiAnnotation.title= dist.name;poiAnnotation.subtitle = dist.adcode;[_mapView addAnnotation:poiAnnotation];if (dist.polylines.count > 0){MAMapRect bounds = MAMapRectZero;for (NSString *polylineStr in dist.polylines){MAPolyline *polyline = [CommonUtility polylineForCoordinateString:polylineStr];[_mapView addOverlay:polyline];bounds = MAMapRectUnion(bounds, polyline.boundingMapRect);}[_mapView setVisibleMapRect:bounds animated:YES];}}}

功能效果图:

但是有几个地方需要注意:

1:在开发平台注册应用时的安全码Bundle ID要与自己应用的Bundle ID一致,否则会出现错误。 2:API Key,在使用搜索服务之前需要先绑定key,[AMapSearchServicessharedServices].apiKey=GaoDeKey; 3:search对象使用全局变量 4:对于输入的城市名要进行分类,否则对于有些城市得不到返回数据的,有些城市返回2个数据,正确情况下是返回一个数据。这一点,我在开发平台没有找到相关内容,如果大家知道,可以告诉我,通过测试得到如下情形:分为直辖市,自治州,以及市3种情况。

具体实现代码如下:传入对应的城市名得到对应城市下区的信息

-(void)getCityAreaCoordinateWithCityName:(NSString *)cityName {//绑定注册应用的key[AMapSearchServices sharedServices].apiKey = GaoDeKey;_search = [[AMapSearchAPI alloc]init];_search.delegate = self;/*进行分类操作1)市辖区:对应上海市市辖区,北京市市辖区,天津市市辖区等2)自治州:大理白族自治州,黔南布依族苗族自治州等3)直接是市:广州市,深圳市,苏州市,杭州市,武汉市,西安市,成都市,乌鲁木齐市等*/AMapDistrictSearchRequest *dis = [[AMapDistrictSearchRequestalloc]init];if([cityName isEqualToString:@"上海"]||[cityName isEqualToString:@"北京"]||[cityName isEqualToString:@"天津"]){dis.keywords = [NSStringstringWithFormat:@"%@市市辖区",cityName];}elseif([cityName containsString:@"自治州"]){dis.keywords = cityName;}else{dis.keywords = [NSStringstringWithFormat:@"%@市",cityName];}//开始请求获取数据[_searchAMapDistrictSearch:dis];}/*** 行政区域查询回调函数* @param request 发起的请求,具体字段参考 AMapDistrictSearchRequest 。* @param response 响应结果,具体字段参考 AMapDistrictSearchResponse 。*/-(void)onDistrictSearchDone:(AMapDistrictSearchRequest *)request response:(AMapDistrictSearchResponse *)response{}/*** 当请求发生错误时,会调用代理的此方法.* @param request 发生错误的请求.* @param error 返回的错误.*/- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error{}

返回的数据类型为AMapDistrictSearchResponse,该类拥有一个数组districts,数组中的每一个对象都是AMapDistrict类,AMapDistrict类中包含了我们需要的信息,center城市中心点,name城市名字等,下面是相关类的信息:

@interface AMapDistrictSearchResponse : AMapSearchObject@property (nonatomic, assign) NSInteger count; //!< 返回数目@property (nonatomic, strong) NSArray *districts; //!< 行政区域 AMapDistrict 数组@end#pragma mark - 行政区划@interface AMapDistrict : AMapSearchObject@property (nonatomic, copy) NSString *adcode; //!< 区域编码@property (nonatomic, copy) NSString *citycode; //!< 城市编码@property (nonatomic, copy) NSString *name; //!< 行政区名称@property (nonatomic, copy) NSString *level; //!< 级别@property (nonatomic, strong) NSArray *districts; //!< 下级行政区域数组@property (nonatomic, copy) AMapGeoPoint *center; //!< 城市中心点@property (nonatomic, strong) NSArray *polylines; //!< 行政区边界坐标点, NSString 数组@end#pragma mark - 通用数据结构// 经纬度@interface AMapGeoPoint : AMapSearchObject<NSCopying>@property (nonatomic, assign) CGFloat latitude;@property (nonatomic, assign) CGFloat longitude;+ (AMapGeoPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon;@end

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。