最近公司在做地圖用的是百度地圖绿渣,百度文檔的坑不用說了 我們的功能不算復(fù)雜 在這里說下
1.首先:老一套 各種配置 網(wǎng)上有好多 我也是在網(wǎng)上找的
2.我用的是3.3.4版本的地圖稿械,所以有好多東西都和以前的一樣
創(chuàng)建地圖
_mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 120, self.view.frame.size.width, self.view.frame.size.height - 120)];
? ? [self.view addSubview:_mapView];
各種設(shè)置,詳細(xì)的可以去找那些大神的文章看看 我這里就是簡(jiǎn)單的使用
_mapView.zoomLevel = 20;
_mapView.rotateEnabled = NO;//這個(gè)是設(shè)置地圖可不可以旋轉(zhuǎn)的
?_mapView.showsUserLocation = YES;
?_mapView.userTrackingMode = BMKUserTrackingModeNone;
肯定少不了定位的啦
_locService = [[BMKLocationService alloc]init];
? ? _locService.distanceFilter = 10;
? ? //啟動(dòng)定位服務(wù)
?? ? [_locService startUserLocationService];
定位的代理方法
? #pragma mark 處理位置坐標(biāo)更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation*)userLocation{
? ? _locationString= [NSStringstringWithFormat:@"%f|%f",userLocation.location.coordinate.longitude,userLocation.location.coordinate.latitude];
? ? [self.locService stopUserLocationService];
}
大頭針的設(shè)置
- (BMKAnnotationView*)mapView:(BMKMapView*)mapView viewForAnnotation:(id)annotation{
? ? NSString*AnnotationViewID =@"AnnotationViewID";
? ? _NewAnnotation= [[BMKPinAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:AnnotationViewID];
? ? // 設(shè)置顏色
? ? ((BMKPinAnnotationView*)_NewAnnotation).pinColor = BMKPinAnnotationColorPurple;
? ? // 從天上掉下效果
? ? ((BMKPinAnnotationView*)_NewAnnotation).animatesDrop = YES;
? ? // 設(shè)置可拖拽
? ? ((BMKPinAnnotationView*)_NewAnnotation).draggable = YES;
? ? //設(shè)置大頭針圖標(biāo)
?? ? ? ? ? ? ((BMKPinAnnotationView*)_NewAnnotation).image= [UIImageimageNamed:[NSStringstringWithFormat:@"location_y%d", i]];
? ? return _NewAnnotation;
}
//這個(gè)是點(diǎn)擊大頭針的方法,不過這里要提醒一下 要設(shè)置了大頭針的標(biāo)題或者副標(biāo)題才能點(diǎn)擊
- (void)mapView:(BMKMapView*)mapView didSelectAnnotationView:(BMKAnnotationView*)view{
}
*********** ? ? ?最重要的就是遵循百度的代理 要卸載下面的這兩個(gè)方法里面 ? ?***************
#pragma mark 遵循代理寫在viewwillappear中
- (void)viewWillAppear:(BOOL)animated {
? ? [_mapView viewWillAppear];
? ? _mapView.delegate = self;
? ? _locService.delegate = self;
? ? _geoCodeSearch.delegate = self;
}
- (void)viewWillDisappear:(BOOL)animated {
? ? [_mapView viewWillDisappear];
? ? _mapView.delegate = nil;
? ? _locService.delegate = nil;
? ? _geoCodeSearch.delegate = nil;
}
還有就是頭文件 代理之類的了
#import "BaiduMapAPI_Base/BMKBaseComponent.h"
#import?"BaiduMapAPI_Map/BMKMapComponent.h"
#import?"BaiduMapAPI_Search/BMKSearchComponent.h"
#import?"BaiduMapAPI_Cloud/BMKCloudSearchComponent.h"
#import?"BaiduMapAPI_Location/BMKLocationComponent.h"
#import?"BaiduMapAPI_Utils/BMKUtilsComponent.h"
#import?"BaiduMapAPI_Radar/BMKRadarComponent.h"
#import?"BaiduMapAPI_Map/BMKMapView.h"
遵循代理
<BMKMapViewDelegate,BMKLocationServiceDelegate,BMKGeoCodeSearchDelegate,BMKGeneralDelegate>
我在這里都寫了一個(gè)全局
//地圖相關(guān)
@property(nonatomic,strong)BMKMapView*? ? ? ? ? mapView;
@property(nonatomic,strong)BMKLocationService*? locService;
@property(nonatomic,strong)BMKGeoCodeSearch*? ? geoCodeSearch;
@property(nonatomic,strong)BMKPointAnnotation*? pointAnnotation;
@property(nonatomic,strong)BMKPinAnnotationView * NewAnnotation;
還有一個(gè)就是去掉百度地圖的Logo也是在網(wǎng)上找的?
//去掉百度地圖的Logo
? ? for(UIView*viewinself.mapView.subviews) {
? ? ? ? for(UIImageView*imageViewinview.subviews) {
? ? ? ? ? ? staticinta =0;
? ? ? ? ? ? a ++;
? ? ? ? ? ? if(a ==4) {
? ? ? ? ? ? ? ? [imageViewremoveFromSuperview];
? ? ? ? ? ? }
? ? ? ? }
? ? }
今天的新需求 ? 要根據(jù)后臺(tái)返回的地理坐標(biāo) 在地圖上畫出來 是一個(gè) 數(shù)組里面有好多坐標(biāo),我們這里后臺(tái)是吧所有的坐標(biāo)點(diǎn) 放在了字符串里面 ()
NSString * points = @"116.38129,39.88384;116.381299,39.882387;116.383239,39.882342;116.383226,39.883889";
? ? ? ? NSMutableArray * arrayM = [NSMutableArray array];
? ? ? ? NSArray *array = [points componentsSeparatedByString:@";"];
? ? ? ? for(int i =0; I<arrayM.coun;i++){
? ? ? ? ? ? ?[arrayMaddObject:array[i]];
? ? ? ? }
?NSMutableArray * arrayM = [NSMutableArray array];
? ? ? ? NSArray *array = [points componentsSeparatedByString:@";"];
? ? ? ? for(int i =0; I <array.count;i++){
? ? ? ? ? ? [arrayMaddObject:array[i]];
? ? ? ? }
? ? ? ? NSMutableArray * dictarray = [NSMutableArray array];
? ? ? ? for(NSString* CoordinateStringinarrayM) {
? ? ? ? ? ? NSArray*array = [CoordinateStringcomponentsSeparatedByString:@","];
? ? ? ? ? ? NSString*longitudeString = array[0];
? ? ? ? ? ? NSString*latitudeeString = array[1];
? ? ? ? ? ? NSDictionary* CoordinateDict=@{@"longitude":longitudeString,@"latitude":latitudeeString};
? ? ? ? ? ? [dictarrayaddObject:CoordinateDict];
? ? ? ? }
? ? ? ? NSIntegersize = dictarray.count;
? ? ? ? CLLocationCoordinate2D * coords = (CLLocationCoordinate2D *)malloc(sizeof(CLLocationCoordinate2D)*size);
? ? ? ? for(int k =0;?k <array.count;k++){
? ? ? ? ? ? NSDictionary* dict = dictarray[k];
? ? ? ? ? ? coords[k].latitude=[dict[@"latitude"]floatValue];
? ? ? ? ? ? coords[k].longitude= [dict[@"longitude"]floatValue];
? ? ? ? }
? ? ? ? BMKPolygon* polygon = [BMKPolygon polygonWithCoordinates:coords count:size];
? ? ? ? [_mapViewaddOverlay:polygon];
最后那個(gè)是 我們返回的坐標(biāo)字符串 ?根據(jù)你們的數(shù)據(jù)進(jìn)行處理就可以了
// 一定要寫這個(gè) ?這個(gè)是給你畫的線 處理顏色 以及 覆蓋物 上顏色的方法 ?
- (BMKOverlayView*)mapView:(BMKMapView*)mapView viewForOverlay:(id)overlay{
? ? if([overlayisKindOfClass:[BMKPolygonclass]]){
? ? ? ? BMKPolygonView* polygonView = [[BMKPolygonView alloc] initWithOverlay:overlay] ;
? ? ? ? polygonView.strokeColor = [[UIColor purpleColor] colorWithAlphaComponent:1];
? ? ? ? polygonView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
? ? ? ? polygonView.lineWidth=2.0;
? ? ? ? returnpolygonView;
? ? }
? ? return nil;
}
//根據(jù)返回的坐標(biāo)點(diǎn)畫線
? ? NSIntegersize = dataArray.count;
? ? CLLocationCoordinate2D * coords = (CLLocationCoordinate2D *)malloc(sizeof(CLLocationCoordinate2D)*size);
? ? for(intk =0; k
? ? ? ? NSDictionary* dict = dataArray[k];
? ? ? ? coords[k].longitude= [dict[@"xaxis"]floatValue];
? ? ? ? coords[k].latitude= [dict[@"yaxis"]floatValue];
? ? }
? ? BMKPolyline* polyline = [BMKPolyline polylineWithCoordinates:coords count:size];
? ? [_mapView addOverlay:polyline];
就這些 了 希望能幫到 需要幫助的人