百度地图常用功能

参考:http://www.jianshu.com/p/9f00911bf530

前言:以前做项目用高德地图SDK,需要注册账号和AppID,然后下载SDK集成到项目中,比较麻烦,看了下苹果自带的MapKit框架,感觉挺好用,官方文档也介绍得很详细,实现地图的显示、显示用户当前位置、放置大头针、弹出气泡等基本功能。希望能帮到刚接触MapKit的朋友~干货点这里

导入主头文件:

#import

MapKit框架使用须知:

MapKit框架中所有数据类型的前缀都是MK。

MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示。

跟踪显示用户的位置

设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置

MKUserTrackingModeNone:不跟踪用户的位置

MKUserTrackingModeFollow:跟踪并在地图上显示用户的当前位置

MKUserTrackingModeFollowWithHeading:跟踪并在地图上显示用户的当前位置,地图会跟随用户的前进方向进行旋转

蓝色发光圆点就是用户的当前位置                                                                                     蓝色发光原点,专业术语叫做“大头针”

地图的类型

可以通过设置MKMapView的mapType设置地图类型                           MKMapTypeStandard:普通地图

MKMapTypeSatellite:卫星云图

MKMapTypeHybrid:混合模式(普通地图覆盖于卫星云图之上)

MKMapTypeSatelliteFlyover:3D立体卫星(iOS9.0)

MKMapTypeHybridFlyover:3D立体混合(iOS9.0)

设置地图的其他属性

1.操作项:

<1.>是否可缩放 :zoomEnabled

<2.>是否可滚动 :scrollEnabled

<3.>是否可旋转 :rotateEnabled

2.显示项:

<1.>是否显示指南针 :showsCompass (iOS9.0)

<2.>是否显示比例尺 :showsScale (iOS9.0)

<3.>是否显示交通 :showsTraffic (iOS9.0)

<4.>是否显示建筑 :showsBuildings

使用注意:设置对应的属性时,注意该属性是从哪个系统版本开始引入的,做好不同系统版本的适配

追踪用户的位置

设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置

MKUserTrackingModeNone:不跟踪用户的位置

MKUserTrackingModeFollow:跟踪并在地图上显示用户的当前位置

MKUserTrackingModeFollowWithHeading:跟踪并在地图上显示用户的当前位置,地图会跟随用户的前进方向进行旋转

注意:iOS8.0之后,追踪用户位置需要用户进行定位授权

备注:

iOS8.0-,地图不会自动滚动到用户所在位置

iOS8.0+,地图会自动放大到合适比例,并显示出用户位置

MKMapView的代理

MKMapView可以设置一个代理对象,用来监听地图的相关行为

常见的代理方法有

1.调用非常频繁,不断监测用户的当前位置每次调用,都会把用户的最新位置(userLocation参数)传进来                                                                                                              - (void)mapView:(MKMapView*)mapViewdidUpdateUserLocation:(MKUserLocation*)userLocation;

2.地图的显示区域即将发生改变的时候调用                                                                        - (void)mapView:(MKMapView*)mapViewregionWillChangeAnimated:(BOOL)animated;

3.地图的显示区域已经发生改变的时候调用                                                                      - (void)mapView:(MKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated;

MKUserLocation(MKUserLocation其实是个大头针模型,包括以下属性)

@property(nonatomic,copy)NSString*title;显示在大头针上的标题

@property(nonatomic,copy)NSString*subtitle;显示在大头针上的子标题

@property(readonly,nonatomic)CLLocation*location;地理位置信息(大头针钉在什么地方?)

设置地图的显示

通过MKMapView的下列方法,可以设置地图显示的位置和区域

1.设置地图的中心点位置          @property(nonatomic)CLLocationCoordinate2DcenterCoordinate;

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

2.设置地图的显示区域                                           @property(nonatomic)MKCoordinateRegionregion;                                                                - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

大头针的基本操作

添加一个大头针:- (void)addAnnotation:(id)annotation;

添加多个大头针:- (void)addAnnotations:(NSArray*)annotations;

移除一个大头针:- (void)removeAnnotation:(id)annotation;

移除多个大头针:- (void)removeAnnotations:(NSArray*)annotations;

(id)annotation参数是什么东西?                                                                                       大头针模型对象:用来封装大头针的数据,比如大头针的位置、标题、子标题等数据

大头针模型

新建一个大头针模型类

#import

@interfaceMJTuangouAnnotation :NSObject

/**坐标位置*/                    @property(nonatomic,assign)CLLocationCoordinate2Dcoordinate;

/**标题*/                                                              @property(nonatomic,copy)NSString*title;

/**子标题*/                                                      @property(nonatomic,copy)NSString*subtitle;

@end

添加大头针

EdTuangouAnnotation*anno = [[MJTuangouAnnotationalloc]init];

[email protected]"热爱iOS的狗";

[email protected]"全部课程15折,会员20折,老学员30折";

anno.coordinate=CLLocationCoordinate2DMake(40,116);

[self.mapViewaddAnnotation:anno];

MKAnnotationView:地图上的大头针控件是MKAnnotationView

MKAnnotationView的属性

@property(nonatomic,strong)id annotation :大头针模型

@property(nonatomic,strong)UIImage*image:显示的图片

@property(nonatomic)BOOLcanShowCallout:是否显示标注

@property(nonatomic)CGPointcalloutOffset:标注的偏移量

@property(strong,nonatomic)UIView*rightCalloutAccessoryView:标注右边显示什么控件

@property(strong,nonatomic)UIView*leftCalloutAccessoryView:标注左边显示什么控件

MKPinAnnotationView

MKPinAnnotationView是MKAnnotationView的子类

MKPinAnnotationView比MKAnnotationView多了2个属性

@property(nonatomic)MKPinAnnotationColorpinColor:大头针颜色

@property(nonatomic)BOOLanimatesDrop:大头针第一次显示时是否从天而降

MKMapItem调用系统APP进行导航

主要方法:[MKMapItem openMapsWithItems:items launchOptions:md];

示例代码

1.根据两个地标对象进行调用系统导航                                                                                         - (void)beginNavWithBeginPlacemark:(CLPlacemark*)beginPlacemark andEndPlacemark:(CLPlacemark *)endPlacemark

{

2.创建起点:根据CLPlacemark地标对象创建MKPlacemark地标对象                                   MKPlacemark *itemP1 = [[MKPlacemark alloc]

initWithPlacemark:beginPlacemark];

MKMapItem *item1 = [[MKMapItem alloc]initWithPlacemark:itemP1];

3.创建终点:根据CLPlacemark地标对象创建MKPlacemark地标对象                                 MKPlacemark *itemP2 = [[MKPlacemark alloc]initWithPlacemark:endPlacemark];

MKMapItem *item2 = [[MKMapItem alloc]initWithPlacemark:itemP2];

NSDictionary *launchDic = @{

4.设置导航模式参数                                                              MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,

5.设置地图类型                                                                              MKLaunchOptionsMapTypeKey :@(MKMapTypeHybridFlyover),

6.设置是否显示交通

MKLaunchOptionsShowsTrafficKey : @(YES),

};

7.根据MKMapItem数组和启动参数字典来调用系统地图进行导航

[MKMapItem openMapsWithItems:@[item1, item2]

launchOptions:launchDic];

}

MKMapCamera地图街景

主要方法:self.mapView.camera = camera;

示例代码

1.创建视角中心坐标:CLLocationCoordinate2D

center = CLLocationCoordinate2DMake(23.132931, 113.375924);

2.创建3D视角:

MKMapCamera *camera = [MKMapCameracameraLookingAtCenterCoordinate:center

fromEyeCoordinate:CLLocationCoordinate2DMake(center.latitude + 0.001,

center.longitude + 0.001) eyeAltitude:1];

3.设置到地图上显示:self.mapView.camera = camera;

MKMapSnapshotter地图截图

1.主要方法

[snapshotter startWithCompletionHandler:^(MKMapSnapshot

* _Nullable snapshot, NSError * _Nullable error) { }];

示例代码

截图附加选项:MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];

1.设置截图区域(在地图上的区域,作用在地图):

options.region =self.mapView.region;

options.mapRect =self.mapView.visibleMapRect;

2.设置截图后的图片大小(作用在输出图像)

options.size =self.mapView.frame.size;

3.设置截图后的图片比例(默认是屏幕比例,作用在输出图像)

options.scale = [[UIScreen mainScreen] scale];

MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc]

initWithOptions:options];

[snapshotter startWithCompletionHandler:^(MKMapSnapshot *_Nullablesnapshot,

NSError*_Nullableerror) {

if(error) {

NSLog(@"截图错误:%@",error.localizedDescription);

}else

{

4.设置屏幕上图片显示

self.snapshootImageView.image = snapshot.image;

将图片保存到指定路径(此处是桌面路径,需要根据个人电脑不同进行修改)

NSData *data = UIImagePNGRepresentation(snapshot.image);

[data writeToFile:@"/Users/wangshunzi/Desktop/snap.png"atomically:YES];

}

}];

MKDirections获取导航路线信息

主要方法

[directions calculateDirectionsWithCompletionHandler:

^(MKDirectionsResponse * _Nullable response,

NSError * _Nullable error) {

}];

绘制路线,添加覆盖层等

主要方法:(这里不像添加大头针那样,只要我们添加了大头针模型,默认就会在地图上添加系统的大头针视图)

1.添加覆盖层,需要我们实现对应的代理方法,在代理方法中返回对应的覆盖层[self.mapViewaddOverlay:overlay];

2.调用了以上方法后,会调用以下代理方法获取对应的渲染涂层                                                     -(MKOverlayRenderer *)mapView:(MKMapView*)mapView rendererForOverlay:(id)overlay

文/百度工程师阿伟(简书作者)
原文链接:http://www.jianshu.com/p/9f00911bf530
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-31 22:07:52

百度地图常用功能的相关文章

iOS第三方地图-百度地图常用功能使用(POI搜索,地理正反编码,定位,添加标注)

百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 百度地图集成 1.引入相关包 注:不需要使用地图功能的可以不用boundle包,模拟器使用的framework和真机不一样具体看官网 2.info.plist中 3.在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC. 4.将一个文件设置为.mm 百度地图使用 1.AppDelegate中注册 _mapManager

百度地图 api 功能封装类 (ZMap.js) 本地搜索,范围查找实例 [源码下载]

相关说明 1. 界面查看: 吐槽贴:百度地图 api 封装 的实用功能 [源码下载] 2. 功能说明: 百度地图整合功能分享修正版[ZMap.js] 实例源码! ZMap.js 本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是否在一个圆圈内,生活服务查询,从经纬度获取地址信息,地图工具包括测距,获取面积,以积打印地图,地图全屏,实时路况,坐标是否在polygon区域内,打车方案,经过中间途经点,添加地图控件: 界面预览 本界面项目由:

百度地图API功能给多个点添加信息窗口

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type

百度地图API功能

984aca5bc78b070e59f34e230f11cf6d http://api.map.baidu.com/api?v=2.0&ak=您的密钥" <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content=&quo

【MUI】百度地图定位功能

博主最近进行一款APP开发,需要用到定位功能,经过一番折腾,终于搞定,不废话,代码如下 mui.plusReady(function() { var longitude, latitude; //var map = new BMap.Map("container"); // navigator.geolocation.getCurrentPosition(function(position) { // longitude = position.coords.longitude; //

初学HBuilder之MUI框架---实现百度地图定位功能

最近接触了一款移动端APP框架,CSS库是MUI,JS库是5+Runtime. 个人感觉这两个库使用起来特别方便. 话不多说,直接上代码: 这是引用百度地图的JS <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=HR3RRyTsXYdQ3QzzG5yUkg0q"></script> <script type="text/

iOS 百度地图 小功能demo

先上图看看样子 下载代码前须知 该代码只能在真机测试下运行,模拟器下会报错.因为demo 很贵,所以... 代码中的注释很全,因为我是新手,写的好不好不要笑话. 代码下载:demo 功能说明: 1.  位置记录功能. 2.  位置发送到服务端. 3.  轨迹回放. 4.  搜索附近正在使用的人. 按钮介绍: 1.     开始按钮: 开启计时器,每两秒钟中获取当前位置,并记录到本地数据库,在记录路线的同时,每间隔30秒钟向服务器发送一次数据. 2.     上传按钮: 记录路线中因网络原因等原因

MUI框架---实现百度地图定位功能

1 2 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=HR3RRyTsXYdQ3QzzG5yUkg0q"></script>     <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/conv

android 百度地图 定位功能

废话不多说 直接新建一个新android项目:location,然后花一分钟申请一个key,然后就是把百度定位demo抄一下就行 1:首先在AndroidManifest.xml中添加权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="andr