最近 由于工作需要在百度地图的基础上要把后台反的某个 省 市 区 在地图上画出来 这个在百度的SDK上是添加覆盖物 在我这里只是简单的 用了一下 没有自定义之类的 都是从官方的demo 上面复制下来的可以放心用
老套路 头文件
#import
#import
#import
#import "BMKGeometry.h" // 注意 这个一定要 不然下面的方法会报错
首先要说一点 代理方法 千万不能忘记写
//地图的代理
mapView.delegate=self;
//检索的代理
districtSearch.delegate=self
//下面是代码
BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 100)];
self.mapView= mapView;
mapView.delegate=self;
self.mapView.zoomLevel = 10 ;
[self.viewaddSubview:mapView];
//初始化BMKDistrictSearch实例
BMKDistrictSearch *districtSearch = [[BMKDistrictSearch alloc] init];
//设置行政区域检索的代理
districtSearch.delegate=self;
//初始化请求参数类BMKDistrictSearchOption的实例
BMKDistrictSearchOption *districtOption = [[BMKDistrictSearchOption alloc] init];
//城市名,必选
districtOption.city=@"北京市";
//区县名字,可选
districtOption.district=@"密云县";
/**
行政区域检索:异步方法,返回结果在BMKDistrictSearchDelegate的
onGetDistrictResult里
districtOption 公交线路检索信息类
return 成功返回YES,否则返回NO
*/
BOOLflag = [districtSearchdistrictSearch:districtOption];
if(flag) {
NSLog(@"行政区域检索发送成功");
}else{
NSLog(@"行政区域检索发送失败");
}
//代理方法
#pragma mark - BMKDistrictSearchDelegate
/**
行政区域检索结果回调
@paramsearcher 检索对象
@paramresult 行政区域检索结果
@paramerror 错误码,@seeBMKCloudErrorCode
*/
- (void)onGetDistrictResult:(BMKDistrictSearch*)searcher result:(BMKDistrictResult*)result errorCode:(BMKSearchErrorCode)error {
[_mapView removeOverlays:_mapView.overlays];
//BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回
if (error == BMK_SEARCH_NO_ERROR) {
for(NSString*pathinresult.paths) {
BMKPolygon *polygon = [self transferPathStringToPolygon:path];
/**
向地图View添加Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:方法
来生成标注对应的View
@paramoverlay 要添加的overlay
*/
[_mapViewaddOverlay:polygon];
}
_mapView.centerCoordinate = result.center;
NSString*message = [NSStringstringWithFormat:@"行政区域编码:%ld\n行政区域名称:%@\n行政区域中心点:%f,%f", result.code, result.name, result.center.latitude,result.center.longitude];
NSLog(@"%@",message);
}
}
- (BMKPolygon*)transferPathStringToPolygon:(NSString*)path {
NSUInteger pathCount = [path componentsSeparatedByString:@";"].count;
if(pathCount >0) {
BMKMapPointpoints[pathCount];
NSArray *pointsArray = [path componentsSeparatedByString:@";"];
for(NSUIntegeri =0; i < pathCount; i ++) {
if([pointsArray[i]rangeOfString:@","].location!=NSNotFound) {
NSArray*coordinates = [pointsArray[i]componentsSeparatedByString:@","];
points[i] =BMKMapPointMake([coordinates.firstObjectdoubleValue], [coordinates .lastObjectdoubleValue]);
}
}
/**
根据多个点生成多边形
points 直角坐标点数组,这些点将被拷贝到生成的多边形对象中
count 点的个数
新生成的多边形对象
*/
BMKPolygon *polygon = [BMKPolygon polygonWithPoints:points count:pathCount];
returnpolygon;
}
return nil;
}
#pragma mark - BMKMapViewDelegate
/**
根据overlay生成对应的BMKOverlayView
@parammapView 地图View
@paramoverlay 指定的overlay
@return生成的覆盖物View
*/
- (BMKOverlayView*)mapView:(BMKMapView*)mapView viewForOverlay:(id)overlay {
if([overlayisKindOfClass:[BMKPolygonclass]]) {
//初始化一个overlay并返回相应的BMKPolygonView的实例
BMKPolygonView *polygonView = [[BMKPolygonView alloc] initWithOverlay:overlay];
//设置polygonView的画笔(边框)颜色
polygonView.strokeColor= [UIColorcolorWithRed:1green:0blue:0alpha:0.6];
//设置polygonView的填充色
polygonView.fillColor= [UIColorcolorWithRed:1green:1blue:0alpha:0.4];
//设置polygonView的线宽度
polygonView.lineWidth=1;
//是否为虚线样式,默认NO
polygonView.lineDash=YES;
returnpolygonView;
}
return nil;
}