ios shapebmkshape 怎么使用

29002人阅读
iOS中使用较多的3款地图,google地图、百度地图、苹果自带地图(高德)。其中苹果自带地图在中国使用的是高德的数据。苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图。在国内使用的较多的就是百度、苹果自带地图(高德),以下总结下这两个。
一、苹果地图的使用
因为苹果使用的是高德的地图,加上苹果做的一些封装,使用起来也非常方便。不需要引入第三方框架,相比较之下,使用百度地图SDK会使源码与程序都大10M多,这点很蛋疼。同时由于苹果使用的是高德,不会像谷歌地图一样在国内乌龟一样的访问速度,确实做一些地图相关的东西,非常有吸引力。
主要用到系统的两个框架:CoreLocation与MapKit。
1、CoreLocation实现定位 &(没有UI的,只是负责一些数据)
需要CLLocationManager定位管理器来管理定位。(开启与结束等)
使用模拟器时,需要设置经纬度:调试--》位置--》自定义位置 & 输入经纬度即可。(北京:北纬39.9”,东经116. 3”)
定位代码如下:
#import &CoreLocation/CoreLocation.h&
@interface MyViewController () &CLLocationManagerDelegate&
@property (nonatomic, strong) CLLocationManager *locM
@implementation MyViewController
- (CLLocationManager *)locMgr
#warning 定位服务不可用
if(![CLLocationManager locationServicesEnabled])
if (!_locMgr) {
// 创建定位管理者
self.locMgr = [[CLLocationManager alloc] init];
// 设置代理
self.locMgr.delegate =
return _locM
- (void)viewDidLoad
[super viewDidLoad];
// 开始定位用户的位置
[self.locMgr startUpdatingLocation];
#pragma mark - CLLocationManagerDelegate
只要定位到用户的位置,就会调用(调用频率特别高)
@param locations : 装着CLLocation对象
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
//CLLocation中存放的是一些经纬度, 速度等信息. 要获取地理位置需要转换做地理位置编码.
// 1.取出位置对象
CLLocation *loc = [locations firstObject];
NSLog(@&CLLocation----%@&,loc);
// 2.取出经纬度
CLLocationCoordinate2D coordinate = loc.
// 3.打印经纬度
NSLog(@&didUpdateLocations------%f %f&, coordinate.latitude, coordinate.longitude);
// 停止定位(省电措施:只要不想用定位服务,就马上停止定位服务)
[manager stopUpdatingLocation];
用CoreLocation还能实现:地理信息编码、反编码、经纬度间距离计算等。
2、MapKit上实现定位(有UI的,可以标记大头针、显示文字等)
MapView就是苹果自带的地图控件,拖控件或手码创建都行。
#import &MapKit/MapKit.h&
#import &CoreLocation/CoreLocation.h&
@interface MyViewController () &MKMapViewDelegate&
@property (weak, nonatomic) IBOutlet MKMapView *mapV
@implementation MyViewController
- (void)viewDidLoad
[super viewDidLoad];
// 1.跟踪用户位置(显示用户的具体位置)
self.mapView.userTrackingMode = MKUserTrackingModeF
// 2.设置地图类型
self.mapView.mapType = MKMapTypeS
// 3.设置代理
self.mapView.delegate =
#pragma mark - MKMapViewDelegate
当用户的位置更新,就会调用
@param userLocation 表示地图上蓝色那颗大头针的数据
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
userLocation.title = @&苍老师在这里&;
userLocation.subtitle = @&苍老师在这里,你知道吗?&;
CLLocationCoordinate2D center = userLocation.location.
NSLog(@&%f %f&, center.latitude, center.longitude);
// 设置地图的显示范围, 让其显示到当前指定的位置
MKCoordinateSpan span = MKCoordinateSpanMake(0..019366);//这个显示大小精度自己调整
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
[mapView setRegion:region animated:YES];
MapView中还能设置大头针,自定义大头针等,很多细节的功能。
二、百度地图的使用
百度给的一个Hello World。凑活看吧。只是实现了显示一个百度地图的view。需要引入一堆框架,如果是模拟器真机换来换去,还得切换静态库。(调试的话最好合并一下,且库有10M多)
需要到百度网站上申请key,且使用模拟器来定位的话,本人测试无反应(用百度给的demo)。。。。。。 建议使用真机!
百度地图使用的是Objective-C++,这意味这必须要有一个.mm文件。
可以根据功能来下载,这样可适当减少SDK的大小。
百度给了各个功能的示例代码,看着还是有些蛋蛋疼的,文件太多。&
1、添加百度地图的View
在delegate中didFinishLaunching中加入这段代码就行,百度Hello World给的代码都切开的。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 添加对BMKMapManager的初始化,并填入您申请的授权Key
BMKMapManager *mapManager = [[BMKMapManager alloc]init];
// 如果要关注网络及授权验证事件,请设定generalDelegate参数
BOOL ret = [mapManager start:@&你的授权key,自己改& generalDelegate:nil];
if (!ret) {
NSLog(@&地图管理器初始化失败!&);
return YES;
viewController中使用也很简单
#import &BMKMapManager.h&
#import &BMKMapView.h&
@interface XNViewController ()
BMKMapView *_mapV
@implementation XNViewController
- (void)viewDidLoad {
[super viewDidLoad];
_mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(55, 100, 200, 200)];
[self.view addSubview:_mapView];
2、使用百度地图定位
百度的东西还是看他自己给的demo吧,BaiduMap_IOSSDK_v2.3.0_Sample 项目里面的LocationDemoViewController类。
用到了BMKLocationService
用法和苹果地图的有很多相似之处,很easy。
这里就不写了。
百度地图还可以实现:路径规划、云检索、路径规划、公交线路查询等,功能还是相当丰富的。
相关资料:
查阅apple官方文档:CoreLocation,MapView
关于定位的原理:
转载请注明出处:&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:610865次
积分:6085
积分:6085
排名:第2761名
原创:103篇
转载:16篇
评论:187条
注意:BLOG中难免有错误或遗漏,如有发现敬请指正,谢谢!(不再向CSDN中上传代码)
名言:站在巨人的肩膀上编程。
姓名:徐能
爱好:Games,Coding,乒乓
专注:iOS, cocos2d
文章:31篇
阅读:343052
文章:19篇
阅读:96798
(1)(2)(7)(7)(17)(10)(3)(5)(4)(4)(4)(4)(4)(6)(4)(5)(7)(5)(7)(5)(8)(1)BaiduMap iOS开发使用百度地图demo,功能十分强大 iPhone 238万源代码下载-
&文件名称: BaiduMap
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 12811 KB
&&上传时间:
&&下载次数: 111
&&提 供 者:
&详细说明: iOS开发使用百度地图demo,功能十分强大-iOS developers use Baidu Map demo
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&BaiduMap&&........\.DS_Store&&__MACOSX&&........\BaiduMap&&........\........\._.DS_Store&&BaiduMap\BaiduMap&&........\........\.DS_Store&&__MACOSX\BaiduMap\BaiduMap&&........\........\........\._.DS_Store&&BaiduMap\BaiduMap\AppDelegate.h&&__MACOSX\BaiduMap\BaiduMap\._AppDelegate.h&&BaiduMap\BaiduMap\AppDelegate.m&&__MACOSX\BaiduMap\BaiduMap\._AppDelegate.m&&BaiduMap\BaiduMap\BaiduMap-Info.plist&&........\........\BaiduMap-Prefix.pch&&__MACOSX\BaiduMap\BaiduMap\._BaiduMap-Prefix.pch&&BaiduMap\BaiduMap\Default-568h@2x.png&&........\........\Default.png&&........\........\Default@2x.png&&........\........\en.lproj&&........\........\........\InfoPlist.strings&&__MACOSX\BaiduMap\BaiduMap\en.lproj&&........\........\........\........\._InfoPlist.strings&&BaiduMap\BaiduMap\inc&&........\........\...\BMapKit.h&&__MACOSX\BaiduMap\BaiduMap\inc&&........\........\........\...\._BMapKit.h&&BaiduMap\BaiduMap\inc\BMKAnnotation.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKAnnotation.h&&BaiduMap\BaiduMap\inc\BMKAnnotationView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKAnnotationView.h&&BaiduMap\BaiduMap\inc\BMKCircle.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKCircle.h&&BaiduMap\BaiduMap\inc\BMKCircleView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKCircleView.h&&BaiduMap\BaiduMap\inc\BMKGeneralDelegate.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKGeneralDelegate.h&&BaiduMap\BaiduMap\inc\BMKGeocodeType.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKGeocodeType.h&&BaiduMap\BaiduMap\inc\BMKGeometry.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKGeometry.h&&BaiduMap\BaiduMap\inc\BMKMapManager.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKMapManager.h&&BaiduMap\BaiduMap\inc\BMKMapView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKMapView.h&&BaiduMap\BaiduMap\inc\BMKMultiPoint.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKMultiPoint.h&&BaiduMap\BaiduMap\inc\BMKOfflineMap.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKOfflineMap.h&&BaiduMap\BaiduMap\inc\BMKOfflineMapType.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKOfflineMapType.h&&BaiduMap\BaiduMap\inc\BMKOverlay.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKOverlay.h&&BaiduMap\BaiduMap\inc\BMKOverlayPathView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKOverlayPathView.h&&BaiduMap\BaiduMap\inc\BMKOverlayView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKOverlayView.h&&BaiduMap\BaiduMap\inc\BMKPinAnnotationView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPinAnnotationView.h&&BaiduMap\BaiduMap\inc\BMKPointAnnotation.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPointAnnotation.h&&BaiduMap\BaiduMap\inc\BMKPoiSearchType.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPoiSearchType.h&&BaiduMap\BaiduMap\inc\BMKPolygon.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPolygon.h&&BaiduMap\BaiduMap\inc\BMKPolygonView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPolygonView.h&&BaiduMap\BaiduMap\inc\BMKPolyline.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPolyline.h&&BaiduMap\BaiduMap\inc\BMKPolylineView.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKPolylineView.h&&BaiduMap\BaiduMap\inc\BMKRouteSearchType.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKRouteSearchType.h&&BaiduMap\BaiduMap\inc\BMKSearch.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKSearch.h&&BaiduMap\BaiduMap\inc\BMKShape.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKShape.h&&BaiduMap\BaiduMap\inc\BMKTypes.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKTypes.h&&BaiduMap\BaiduMap\inc\BMKUserLocation.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKUserLocation.h&&BaiduMap\BaiduMap\inc\BMKVersion.h&&__MACOSX\BaiduMap\BaiduMap\inc\._BMKVersion.h&&........\........\........\._inc&&BaiduMap\BaiduMap\libs&&........\........\....\Release-iphoneos&&........\........\....\................\libbaidumapapi.a&&__MACOSX\BaiduMap\BaiduMap\libs&&........\........\........\....\Release-iphoneos&&........\........\........\....\................\._libbaidumapapi.a&&........\........\........\....\._Release-iphoneos&&BaiduMap\BaiduMap\libs\Release-iphonesimulator&&........\........\....\.......................\libbaidumapapi.a&&__MACOSX\BaiduMap\BaiduMap\libs\Release-iphonesimulator&&........\........\........\....\.......................\._libbaidumapapi.a&&........\........\........\....\._Release-iphonesimulator&&........\........\........\._libs&&BaiduMap\BaiduMap\main.m&&__MACOSX\BaiduMap\BaiduMap\._main.m&&BaiduMap\BaiduMap\mapapi.bundle
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 书籍:Eclipse从入门到精通,本书以最新的eclipse 3.2作为写作版本。全书分为5篇:起步篇介绍了eclipse及相关插件的安装,还介绍了一些eclipse开发环境的基本使用技巧;swt/jface篇详细介绍了swt、jface的使用:插件开发篇详细讲解了eclipse插件开发的各个步骤;
&[] - OC编写的有关音频的一个demo。 有用到系统基础音频播放,以及openAL的音频应用
&[] - iPhone 3D[蜷_l
(iPhone.3D.Game.Programming.All.In.One,.Jeremy.Alessi,.Coursr,.2011)
&[] - opencv视频处理,运动物体跟踪,运动轨迹的提取
&[] - iPhone与ipad开发中,最开始就接触到也是第一次踏入这门只是的 第一个程序--Hello World
&[] - iphone应用上能够实现在线下载网络上的zip文件的功能,界面比较简单
&[] - 精彩iPhone炫酷开发七位一线高手的编程和设计范例The wonderful iPhone Centro developers master of the seven first-line programming and design examples
&[] - iphone简单的天气预报软件 适合初学者。各个功能的知识点都有用到
&[] - 提供全国天气查询的Demo,简单,易懂,用的是JSON数据流
&[] - 在iphone与ipad开发中需要掌握的一项UI控件技术呵呵!大家不要只看帖不回帖么,要不然我都没有积极性了。
第一步:创建一个用来呈现mapview的viewcontroller,不废话直接贴代码
BasicMapViewController需要在该类中加入地图的代理并实现相关事件
#define xian
CLLocationCoordinate2DMake(34.,108.);
#import "BasicMapViewController.h"
#import “KHPaoPaoView.h”//气泡窗口
#import “KHPointAnnotation.h”//point
@interfaceBasicMapViewController ()
BMKMapView *_mapV
NSBundle *
NSArray *pointA
@implementation BasicMapViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view.
CGFloat navH = 64;
if (__IPHONE_OS_VERSION & 7.0)
navH = 44;
= [[BMKMapView alloc] initWithFrame:CGRectMake(0, navH+60, __SCREEN_SIZE.width, __SCREEN_SIZE.height-navH-60)];
_mapView.showMapScaleBar = NO;
_mapView.overlooking = 0;
bundle = [NSBundle mainBundle];
[self.view addSubview:_mapView];
KHPointAnnotation *point = [[KHPointAnnotationalloc] init];
point.title = @"西安市";
point.subtitle = @"我在这";
point.title1 = @"自定义泡泡测试";
point.title2 = @"自定义测试";
point.coordinate = xian;
BMKPointAnnotation *point1 = [[BMKPointAnnotationalloc] init];
point1.title = @"北京市";
point1.subtitle = @"0";
point1.coordinate = CLLocationCoordinate2DMake(39.905206, 116.390356);
pointArr = @[point,point1];
-(void)viewWillAppear:(BOOL)animated
[_mapViewviewWillAppear];
_mapView.delegate = self;// 此处记得不用的时候需要置nil,否则影响内存的释放
-(void)viewWillDisappear:(BOOL)animated
[_mapViewviewWillDisappear];
_mapView.delegate = nil;// 不用时,置nil
- (IBAction)switchAction:(UISwitch *)sender
if (sender.tag ==1)
if (sender.on)
[_mapViewsetMapType:BMKMapTypeStandard];
[_mapViewsetMapType:BMKMapTypeSatellite];
if (sender.tag == 2)
//第一参数地图中心位置,第二参数一中心点显示周围的经纬度差值
if (sender.on)
[_mapViewsetRegion:BMKCoordinateRegionMake(CLLocationCoordinate2DMake(34.,108.), BMKCoordinateSpanMake(0.5,0.5)) animated:YES];
[_mapViewsetRegion:BMKCoordinateRegionMake(CLLocationCoordinate2DMake(39.905206, 116.390356), BMKCoordinateSpanMake(0.5,0.5)) animated:YES];
if (sender.tag == 3)
[_mapView setTrafficEnabled:sender.on];
- (void)mapViewDidFinishLoading:(BMKMapView *)mapView
KHLog(@"地图加载完成");//回调事件请自行参考使用
[_mapViewsetCompassPosition:CGPointMake(100,100)];//指南针位置可能看不见,这个和官方的交流吧!不清楚是什么原因
[_mapViewaddAnnotations:pointArr];
- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
KHLog(@"地图区域改变完成");
#pragma mark 设置大头针
-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id&BMKAnnotation&)annotation
if([annotation isKindOfClass:[BMKPointAnnotation class]])
BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
newAnnotationView.pinColor = BMKPinAnnotationColorRed;
newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
return newAnnotationV
这里使用自定义大头针
BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
newAnnotationView.image = [UIImageimageWithContentsOfFile:[bundlepathForResource:@"local@2x"ofType:@"png"]];
newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
KHPaoPaoView *paopao = [[KHPaoPaoView alloc] init];
[paopao setAnnotationWith:((KHPointAnnotation *)annotation)];
newAnnotationView.paopaoView = [[BMKActionPaopaoView alloc] initWithCustomView:paopao];
return newAnnotationV
第二步:创建大头针相关的类、
KHPointAnnotation这个类只要是实现了BMKAnnotation
// 该类为一个抽象类,定义了基于BMKAnnotation的BMKShape类的基本属性和行为,不能直接使用,必须子类化之后才能使用
@interface BMKShape : NSObject &BMKAnnotation& {
#import "BMKPointAnnotation.h"
@interface KHPointAnnotation : BMKShape{
CLLocationCoordinate2D _
///该点的坐标
@property (nonatomic, assign) CLLocationCoordinate2D
@property (strong) NSString *title1;
@property (strong) NSString *title2;
//.m中没什么东西就不贴了
KHPointAnnotation.h这个类继承自UIView
主要就是大头针被选中后展示内容
#import &UIKit/UIKit.h&
#import "KHPointAnnotation.h"
@interface KHPaoPaoView : UIView
UILabel *label1;
UILabel *label2;
UILabel *label3;
UILabel *label4;
-(instancetype)
@param point 标注
-(void)setAnnotationWith:(KHPointAnnotation *)
#import "KHPaoPaoView.h"
@implementation KHPaoPaoView
-(instancetype)init
self = [super init];
这里需要注意百度地图中使用的是碎图片拼起来的,这里的细化工作呵呵你们自己完成吧!
UIImage *image =[UIImageimageWithContentsOfFile:[[NSBundlemainBundle] pathForResource:@"medium@2x"ofType:@"png"]];
self.frame = CGRectMake(0, 0, image.size.width+10, image.size.height+10);
UIImageView *IMG = [[UIImageViewalloc] initWithFrame:self.frame];
IMG.image =
IMG.contentMode = UIViewContentModeScaleAspectFit;
[self addSubview:IMG];
label1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 10,
__SCREEN_SIZE.width-100, 15)];
[label1setFont:[UIFontsystemFontOfSize:14.0f]];
[self addSubview:label1];
label2 = [[UILabel alloc] initWithFrame:CGRectMake(10, 25,
__SCREEN_SIZE.width-100, 15)];
[label2setFont:[UIFontsystemFontOfSize:14.0f]];
[self addSubview:label2];
label3 = [[UILabel alloc] initWithFrame:CGRectMake(10, 40,
__SCREEN_SIZE.width-100, 15)];
[label3setFont:[UIFontsystemFontOfSize:14.0f]];
[self addSubview:label3];
label4 = [[UILabel alloc] initWithFrame:CGRectMake(10, 55,
__SCREEN_SIZE.width-100, 15)];
[label4setFont:[UIFontsystemFontOfSize:14.0f]];
[self addSubview:label4];
returnself;
-(void)setAnnotationWith:(KHPointAnnotation *)point
label1.text = point.title;
label2.text = point.subtitle;
label3.text = point.title1;
label4.text = point.title2;
阅读(...) 评论()ios软件开发(34)
  最近仿照美团做了款应用,刚好用到百度地图,高德地图之前用的比较多,只是这个项目的后台服务器是另外一个公司做的,他们用的就是百度地图,现在网上用百度地图的还不算太多,博文也是断断续续的,主要是中间跳跃有点大,没有可运行的demo,看不到效果。纠结了好久,结合别人的总结和从百度官网上下载的demo,详细记录一下百度地图的使用过程,分享一下,也便于以后查阅使用。
  百度地图的使用和苹果一样,相对于高德地图来说规范了好多。直接将程序的bundle Identity和appkey值绑定,虽然刚开始用感觉有点不习惯,相信规范严谨对于国内的程序开发也算是一种引导吧。闲言少絮,下面开始百度地图的使用说明。
第一步:注册百度账号,申请appkey。直接上图片效果比较直接。,这里面有个小插曲,当初习惯性地将禁用服务ios地图sdk勾选上,做了无数次的测试一直不显示地图页面。纠结了好久,偶然间想到可能是appkey的问题,重新走了一遍,原来把禁用服务勾选上了,改过来就好了,做我们这行的严谨、认真还是很有必要地。
第二步:将百度地图sdk包添加到程序,在AppDelegate导入
#import&CoreLocation/CoreLocation.h&
#import &AGViewDelegate.h&
#import &BMapKit.h&
上述文件,添加如下委托和对象
@interface AppDelegate : UIResponder &UIApplicationDelegate,CLLocationManagerDelegate,BMKGeneralDelegate&
& & AGViewDelegate *_viewD//
& & BMKMapManager* _mapM//百度地图管理器 & &
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中调用开启百度地图定位的方法
- (void)configureAPIKey
& & _mapManager = [[BMKMapManager alloc] init];
& & BOOL ret = [_mapManager start:@&appkey&generalDelegate:self];
& & if (ret)
& & & & NSLog(@&百度地图开启定位:&);
第三步:百度地图视图和百度位置服务的使用
在使用地图的页面导入百度地图文件
#import &BMapKit.h&
BMKMapViewDelegate,BMKLocationServiceDelegate委托对象
@property(nonatomic,retain)BMKMapView* baiduMapV//地图视图
@property(nonatomic,retain)BMKLocationService* locationS//百度地图定位服务对象
@synthesize baiduMapV
@synthesize locationS
当然不用的时候需要释放掉
if (baiduMapView)
& & & & [baiduMapView release];
& & & & baiduMapView =
& & if (locationService)
& & & & [locationService release];
& & & & locationService =
- (void)viewWillAppear:(BOOL)animated
& & [super viewWillAppear:animated];
& & baiduMapView.delegate =
& & locationService.delegate =
-(void)viewWillDisappear:(BOOL)animated
& & [baiduMapView viewWillDisappear];
baiduMapView.delegate =
& & locationService.delegate =
& & [super viewWillDisappear:animated];
当然在使用地图视图控件之前需要先开启百度地图的定位服务
//初始化定位服务对象
& & self.locationService = [[[BMKLocationService alloc]init]autorelease];
& & locationService.delegate=
//显示定位的蓝点儿必须先开启定位服务
& & [locationService startUserLocationService];
&接下来就是地图视图控件使用了
&& self.baiduMapView = [[[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)]autorelease];
& & //初始化百度地图对象
& & baiduMapView.delegate =
& & [baiduMapView setMapType:BMKMapTypeStandard];
& & baiduMapView.zoomLevel=17;//地图级别
& & //显示定位的蓝点儿必须先开启定位服务
& & [locationService startUserLocationService];
& & [baiduMapView setShowsUserLocation:NO];
& & baiduMapView.userTrackingMode=BMKUserTrackingModeN//地图模式
& & [baiduMapView setShowsUserLocation:YES];//显示定位的蓝点儿
& & coordinate.latitude = [XtomFunction xfuncGetAppdelegate].currentLocation.coordinate.//纬度
& & coordinate.longitude = [XtomFunction xfuncGetAppdelegate].currentLocation.coordinate.//经度
& & BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(0.3,0.3));
& & BMKCoordinateRegion adjustedRegion = [baiduMapView regionThatFits:viewRegion];
& & [baiduMapView setRegion:adjustedRegion animated:YES];
到这里已经可以展示地图信息数据了,当然一些复杂的东西需要下面的委托实现
第四步:百度地图中常用委托方法的使用
&*用户方向更新后,会调用此函数
&*@param userLocation 新的用户位置
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
& & [baiduMapView updateLocationData:userLocation];
& & NSLog(@&heading is %@,%f,%f,%f,%f,%f,%f&,userLocation.heading,userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude,localLatitude,localLongitude,coordinate.latitude,coordinate.longitude);
& & NSLog(@&dingweifuwu:%f,%f&,locationService.userLocation.location.coordinate.latitude,locationService.userLocation.location.coordinate.longitude);
& & NSLog(@&dangqian:%f,%f&,locationService.userLocation.location.coordinate.latitude,locationService.userLocation.location.coordinate.longitude);
& & //改变成百度经纬度
& & AppDelegate *myDelegate = [XtomFunction xfuncGetAppdelegate];
& & myDelegate.currentLocation = userLocation.
& & myDelegate.myCoordinate=CLLocationCoordinate2DMake(userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude);*/
//开始缩放委托
- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)
& & NSString* showmeg = [NSString stringWithFormat:@&地图区域发生了变化(x=%d,y=%d,\r\nwidth=%d,height=%d).\r\nZoomLevel=%d;RotateAngle=%d;OverlookAngle=%d&,(int)baiduMapView.visibleMapRect.origin.x,(int)baiduMapView.visibleMapRect.origin.y,(int)baiduMapView.visibleMapRect.size.width,(int)baiduMapView.visibleMapRect.size.height,(int)baiduMapView.zoomLevel,baiduMapView.rotation,baiduMapView.overlooking];
& & NSLog(@&gesturescale:%@&,showmeg);
& & CLLocationCoordinate2D firstLocation=[baiduMapView convertPoint:CGPointMake(0, 0) toCoordinateFromView:baiduMapView];
& & CLLocationCoordinate2D secondLocation=[baiduMapView convertPoint:CGPointMake(0, UI_View_Hieght+64) toCoordinateFromView:baiduMapView];
& & distance=[XtomFunction distanceBetweenOrderBy:firstLocation.latitude :firstLocation.longitude :secondLocation.latitude :secondLocation.longitude]/2;
& & //第一次获取数据的时候不加载
& & if (isFirstLoad)
& & & & localLatitude=baiduMapView.centerCoordinate.
& & & & localLongitude=baiduMapView.centerCoordinate.
& & & & //重新获取数据
& & & & [self requestGetLocationList];
//原理类似 UITableView 循环委托加载 CellforRowWithIndexPath
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id &BMKAnnotation&)annotation
& & //商家详情
& & if (isShangjia)
& & & & if ([annotation isKindOfClass:[BMKPointAnnotation class]])
& & & & & & // 生成重用标示identifier
& & & & & & NSString *AnnotationViewID = @&shangjia&;
& & & & & & // 检查是否有重用的缓存
& & & & & & BMKAnnotationView* annotationView = [baiduMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
& & & & & & // 缓存没有命中,自己构造一个,一般首次添加annotation代码会运行到此处
& & & & & & if (annotationView == nil)
& & & & & & {&annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];&((BMKPinAnnotationView*)annotationView).pinColor = BMKPinAnnotationColorR
& & & & & & & & // 设置重天上掉下的效果(annotation)
& & & & & & & & ((BMKPinAnnotationView*)annotationView).animatesDrop = YES;&}
& & & & & & // 设置位置
& & & & & & annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height * 0.5));&annotationView.annotation =
& & & & & & // 单击弹出泡泡,弹出泡泡前提annotation必须实现title属性
& & & & & & annotationView.canShowCallout = YES;
& & & & & & //美食
& & & & & & if ([activityType isEqualToString:@&美食&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&美食图标.png&];
& & & & & & }
& & & & & & //丽人
& & & & & & else if ([activityType isEqualToString:@&丽人&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&丽人图标.png&];
& & & & & & }
& & & & & & //生活服务
& & & & & & else if ([activityType isEqualToString:@&生活服务&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&生活服务图标.png&];
& & & & & & }
& & & & & & //休闲娱乐
& & & & & & else if ([activityType isEqualToString:@&休闲娱乐&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&休闲娱乐图标.png&];
& & & & & & }
& & & & & & //旅游
& & & & & & else if ([activityType isEqualToString:@&旅游&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&旅游图标.png&];
& & & & & & }
& & & & & & //购物
& & & & & & else if ([activityType isEqualToString:@&购物&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&购物图标.png&];
& & & & & & }
& & & & & & //酒店
& & & & & & else if ([activityType isEqualToString:@&酒店&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&酒店图标.png&];
& & & & & & }
& & & & & & //今日订单
& & & & & & else if ([activityType isEqualToString:@&今日订单&])
& & & & & & {
& & & & & & & & annotationView.image=[UIImage imageNamed:@&今日订单图标.png&];
& & & & & & }
& & & & & & //annotationView.image=[UIImage imageNamed:@&丽人图标.png&];
&& & & & & &
& & & & & & // 设置是否可以拖拽
& & & & & & annotationView.draggable = NO;
& & & & & & return annotationV
&& & & & & &
& & & & & & /*
&& & & & & & BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@&myAnnotation&];
& & & & & & &
&& & & & & & newAnnotationView.pinColor = BMKPinAnnotationColorP
& & & & & & &
&& & & & & & newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
& & & & & & &
&& & & & & & newAnnotationView.annotation=
& & & & & & &
&& & & & & & newAnnotationView.image = [UIImage imageNamed:@&丽人图标.png&]; & //把大头针换成别的图片
& & & & & & &
&& & & & & & return newAnnotationV*/
&& & & & & &
& & else if (isLuxian)
& & & & if ([annotation isKindOfClass:[RouteAnnotation class]])
& & & & & & return [self getRouteAnnotationView:view viewForAnnotation:(RouteAnnotation*)annotation];
这里介绍一下百度地图中常见的两个点,花费了我好长的时间总结出来的,分享一下吧。比如获取百度地图中当前的位置,可以在开启百度位置服务,走完
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation委托方法后,通过
locationService.userLocation.location.coordinate获得 &
再比如 想获取当前地图的中心点的经纬度 可以这样获得baiduMapView.centerCoordinate 还有百度地图中坐标点和地图中经纬度的转换
CLLocationCoordinate2D firstLocation=[baiduMapView convertPoint:CGPointMake(0, 0) toCoordinateFromView:baiduMapView];这个是远点的经纬度
第四步:自定义标注的添加
//添加大头钉
& & & & BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
& & & & CLLocationCoordinate2D
& & & & coor.latitude = localL
& & & & coor.longitude = localL
& & & & annotation.coordinate =
& & & & //annotation.title = @&这里是北京&;
& & & & [baiduMapView addAnnotation:annotation];
//原理类似 UITableView 循环委托加载 CellforRowWithIndexPath
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id &BMKAnnotation&)annotation委托方法实现,当然还有个获取选中哪个大头钉或者标注点的委托方法
//当选中一个annotation views时,调用此接口
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(CustomAnnotationView *)view
& & //只展示首页的大头钉
& & if (isLuxian||isShangjia)
& & //获取点击视图的区域
& & CLLocationCoordinate2D leftTopLocation=[baiduMapView convertPoint:CGPointMake(view.frame.origin.x, view.frame.origin.y) toCoordinateFromView:baiduMapView];
& & CLLocationCoordinate2D rightDownLocation=[baiduMapView convertPoint:CGPointMake(view.frame.origin.x+view.frame.size.width, view.frame.origin.y+view.frame.size.height) toCoordinateFromView:baiduMapView];
& & //临时数组
& & NSMutableArray *tempArray=[[[NSMutableArray alloc]init]autorelease];
& & for (int i = 0; i&detailData. i++)
& & & & NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelease];
& & & & NSDictionary *temDict = [detailData objectAtIndex:i];
& & & & for(NSString *key in temDict.allKeys)
& & & & & & NSString *value = [temDict objectForKey:key];
& & & & & & if(![XtomFunction xfunc_check_strEmpty:value])
& & & & & & {
& & & & & & & & [dict setObject:value forKey:key];
& & & & & & }
& & & & //纬度
& & & & float tempLat=[[temDict objectForKey:@&lat&]floatValue];
& & & & //经度
& & & & float tempLng=[[temDict objectForKey:@&lng&]floatValue];
& & & & NSLog(@&jingweidu:%f,%f,%f,%f,%f,%f&,leftTopLocation.latitude,leftTopLocation.longitude,rightDownLocation.latitude,rightDownLocation.longitude,tempLat,tempLng);
& & & & //获取该区域下的数据
& & & & if (tempLat &=rightDownLocation.latitude&&tempLat &=leftTopLocation.latitude&&tempLng &=leftTopLocation.longitude&&tempLng &=rightDownLocation.longitude)
& & & & & & [tempArray addObject:temDict];
& & NSLog(@&shuzu:%@&,tempArray);
& & [view.superview insertSubview:view atIndex:1000];
& & view.temArr=tempA
& & view.biaozhu.dataSource=tempA
& & [view loadTableData];
& & [view retain];
}也一并分享一下吧。
第五步:百度地图中公交线路信息的获取
公交、地铁、汽车、步行这几个是常见的东西这个比较麻烦一些,感兴趣的可以去百度地图的demo中查询,我给出链接吧。http://download.csdn.net/detail/kuuailetianzi/7907889 至此,百度地图的使用介绍的差不多了,我也该休息休息了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5338次
排名:千里之外
原创:25篇
转载:10篇
(1)(4)(8)(11)(11)}

我要回帖

更多关于 ios shapelayer 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信