百度地圖定位 和添加地圖圍欄

(一)自iOS 地圖SDK v2.5.0起,為了對iOS8的定位能力做兼容,做了相應的修改,使用注意事項如下:

需要在info.plist里添加(以下二選一,兩個都添加默認使用NSLocationWhenInUseUsageDescription):

1) NSLocationWhenInUseUsageDescription ,允許在前臺使用時獲取GPS的描述

2) NSLocationAlwaysUsageDescription ,允許永久使用GPS的描述。



功能位于“基礎地圖(Map)”功能模塊,開發者使用時請注意選擇。

核心代碼如下:(完整信息請參考Demo)

//以下_mapView為BMKMapView對象? _mapView.showsUserLocation = YES;//顯示定位圖層? _mapView.userTrackingMode = BMKUserTrackingModeNone;//設置定位的狀態為普通定位模式

定位模式

目前為止,BMKMapView的定位模式(userTrackingMode)有4種分別是:

BMKUserTrackingModeNone:

普通定位模式,顯示我的位置,我的位置圖標和地圖都不會旋轉

BMKUserTrackingModeFollow?:

定位跟隨模式,我的位置始終在地圖中心,我的位置圖標會旋轉,地圖不會旋轉

BMKUserTrackingModeFollowWithHeading?:

定位羅盤模式,我的位置始終在地圖中心,我的位置圖標和地圖都會跟著旋轉

BMKUserTrackingModeHeading:

v4.1起支持,普通定位+定位羅盤模式,顯示我的位置,我的位置始終在地圖中心,我的位置圖標會旋轉,地圖不會旋轉。即在普通定位模式的基礎上顯示方向。



(二)以上為定位的分類,選擇哪一種可以根據產品需求來確定,接下來要補充的則是自定義大頭針的顯示。和移動大頭針的方法


首先聲明成員變量

{

? ? BMKCircle* circle;

? ? BMKPointAnnotation* animatedAnnotation;

? ? BMKPointAnnotation* lockedScreenAnnotation;

}

1)創建大頭針

- (void)addAnnotation {

? ? // 大頭針? 我的位置

? ? CLLocationCoordinate2D location1=CLLocationCoordinate2DMake(_userLoca.location.coordinate.latitude, _userLoca.location.coordinate.longitude);

? ? if (animatedAnnotation == nil) {

? ? ? ? animatedAnnotation = [[BMKPointAnnotation alloc]init];

? ? ? ? animatedAnnotation.coordinate = location1;

? ? } ??

?[_mapView addAnnotation:animatedAnnotation];

}

-(void)addCompanyAnnotationWithLatitude:(double)latitudeNum WithLongitude:(double)longitudeNum{

? ? // 大頭針 公司位置

? ? CLLocationCoordinate2D location1=CLLocationCoordinate2DMake(latitudeNum,longitudeNum);

? ? ?if (lockedScreenAnnotation == nil) {

? ? ? ? lockedScreenAnnotation = [[BMKPointAnnotation alloc]init];

? ? ? ? lockedScreenAnnotation.title = @"我是動畫Annotation";

? ? }

? ? ? lockedScreenAnnotation.coordinate = location1;

? ? [_mapView addAnnotation:lockedScreenAnnotation];

}

//自定義百度地圖的大頭針 ? 實現兩種大頭針區分顯示的代理方法

-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id)annotation{

? ? //動畫annotation

? ? if (annotation == animatedAnnotation) {

? ? ? ? NSString *AnnotationViewID = @"AnimatedAnnotation"; ? ? ? ? ? ? ? ?MyAnimatedAnnotationView *annotationView = nil;

? ? ? ? if (annotationView == nil) {

?? ? ? ? ? ?annotationView = [[MyAnimatedAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];

? ? ? ? }

? ? ? ? NSMutableArray *images = [NSMutableArray array];

? ? ? ? UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"My_Local"]];

? ? ? ? [images addObject:image];

? ? ? ? annotationView.annotationImages = images;

? ? ? ? return annotationView;

? ? }

? ? //動畫lockedScreenAnnotation

? ? if (annotation == lockedScreenAnnotation) {

? ? ? ? NSString *AnnotationViewID = @"lockedScreenAnnotation";

? ? ? ? MyAnimatedAnnotationView *annotationView = nil;

? ? ? ? if (annotationView == nil) {

? ? ? ? ? ? annotationView = [[MyAnimatedAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];

? ? ? ? }

? ? ? ? NSMutableArray *images = [NSMutableArray array];

? ? ? ? UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"Cump_Local"]];

? ? ? ? [images addObject:image];

? ? ? ? annotationView.annotationImages = images;

? ? ? ? return annotationView;

? ? }

? ? return nil;

}

移動大頭針

MyAnimatedAnnotationView *annotationView =(MyAnimatedAnnotationView*) [_mapView viewForAnnotation:animatedAnnotation];

CLLocationCoordinate2D location1=CLLocationCoordinate2DMake(_userLoca.location.coordinate.latitude, _userLoca.location.coordinate.longitude);

? ? animatedAnnotation.coordinate = location1;

通過。viewForAnnotation 這個函數,傳你要移動的大頭針類型,等待這個的大頭針的View ,然后重新賦值其經緯度。MyAnimatedAnnotationView 為自定義的大頭針View ,會在文章最后附上自定義代碼。


(三)獲得地圖上兩點之間的距離。

1.獲得第一個坐標點

BMKMapPoint userLocalpoint1 = BMKMapPointForCoordinate(userLocation.location.coordinate);

2.獲得第二個坐標點 (這個坐標點在我的項目中是由后臺返回的經緯度,在這里是使用字段取值的方式獲得)

? ? CLLocationCoordinate2D location2 =CLLocationCoordinate2DMake([[_dataDic objectForKey:@"address_lat"] doubleValue],[[_dataDic objectForKey:@"address_lng"] doubleValue]);

? ? BMKMapPoint point2 = BMKMapPointForCoordinate(location2);

3.通過下面的函數 獲取兩者之間的距離

? ? CLLocationDistance distance = BMKMetersBetweenMapPoints(userLocalpoint1, point2);



(四)添加圓形地圖圍欄

百度地圖的圓形圍欄 類:BMKCircle

1)BMKCircle* circle; ?//聲明變量

2)mapView遵循BMKMapViewDelegate代理,并實現添加覆蓋物的代理方法

#pragma mark implement BMKMapViewDelegate//根據overlay生成對應的View- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id)overlay

{

? ? if ([overlay isKindOfClass:[BMKCircle class]])

? ? { BMKCircleView* circleView = [[BMKCircleView alloc] initWithOverlay:overlay];

? ? ? ? circleView.fillColor = [SHDMapCircleColor colorWithAlphaComponent:0.2];

? ? ? ? circleView.strokeColor = [SHDMapCircleColor colorWithAlphaComponent:1.0];

? ? ? ? circleView.lineWidth = 1.0;

? ? ? ? return circleView;

? ? }

? ? return nil;

}

參數說明

circleView.fillColor : ? ? ? ? ?為設置外邊框的顏色

circleView.lineWidth = 1.0; ?為設置的邊框寬度

circleView.strokeColor : ? 為設置圓行覆蓋物內部填充顏色



(五)附加自定義大頭針View的完整代碼。

1. 頭文件

//// MyAnimatedAnnotationView.h// IphoneMapSdkDemo//// Created by wzy on 14-11-27.// Copyright (c) 2014年 Baidu. All rights reserved.//#import@interface MyAnimatedAnnotationView : BMKAnnotationView

@property (nonatomic, strong) NSMutableArray *annotationImages;

@property (nonatomic, strong) UIImageView *annotationImageView;

@end


2.實現文件

//// MyAnimatedAnnotationView.m// IphoneMapSdkDemo//// Created by wzy on 14-11-27.// Copyright (c) 2014年 Baidu. All rights reserved.//#import "MyAnimatedAnnotationView.h"@implementation MyAnimatedAnnotationView@synthesize annotationImageView = _annotationImageView;@synthesize annotationImages = _annotationImages;- (id)initWithAnnotation:(id)annotation reuseIdentifier:(NSString *)reuseIdentifier {

? ? self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];

? ? if (self) {

//? ? ? ? [self setBounds:CGRectMake(0.f, 0.f, 30.f, 30.f)];

? ? ? ? [self setBounds:CGRectMake(0.f, 0.f, 32.f, 32.f)];

? ? ? ? [self setBackgroundColor:[UIColor clearColor]];


? ? ? ? _annotationImageView = [[UIImageView alloc] initWithFrame:self.bounds];

? ? ? ? _annotationImageView.contentMode = UIViewContentModeCenter;

? ? ? ? [self addSubview:_annotationImageView];

? ? }

? ? return self;

}

- (void)setAnnotationImages:(NSMutableArray *)images {

? ? _annotationImages = images;

? ? [self updateImageView];

}

- (void)updateImageView {

? ? if ([_annotationImageView isAnimating]) {

? ? ? ? [_annotationImageView stopAnimating];

? ? }


? ? _annotationImageView.animationImages = _annotationImages;

? ? _annotationImageView.animationDuration = 0.5 * [_annotationImages count];

? ? _annotationImageView.animationRepeatCount = 0;

? ? [_annotationImageView startAnimating];

}

@end

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容