iOS8苹果地图开发实例

2016/7/21 14:44:08 0人评论 1066 次 分类:技术文章

从苹果设备IOS6以后,苹果就不再使用旧版地图,而且自行开发了一款苹果全新的地图软件,但是API编程接口没有太大的变化。开发人员不需要再学习很多新东西就能开发地图应用。

iOS应用程序中使用Map Kit API开发地图应用程序。 其核心是MKMapView类使用。我们可以设置地图显示方式、控制地图,可以在地图上添加标注。

显示地图

在Map Kit API中显示地图的视图是MKMapView,它的委托协议是MKMapViewDelegate。Map Kit API使用需要导入MapKit框架。

下面我们通过一个案例介绍一下面我们介绍一下Map Kit API的使用。这个案例在“输入查询地点关键字”文本框中输入关键字,点击“查询”按钮,先进行地理信息编码查询,查询获得地标信息后,在地图上标注出来。

1

首先添加框架MapKit.framework。然后在工程中打开MainStoryboard.storyboard的IB设计,从对象库中拖拽Map View到设计画面中。

2

调整它的位置和大小使得Map View尽可能填出画面下面的空白部分,然后为Map View定义输入出口。下面我们看看主视图控制器ViewController.h代码:

  1. #import <UIKit/UIKit.h>  
  2.   
  3. #import <MapKit/MapKit.h>  
  4.   
  5. #import ”MapLocation.h”  
  6.   
  7.    
  8.   
  9. @interface ViewController : UIViewController <MKMapViewDelegate>  
  10.   
  11.    
  12.   
  13. @property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;  
  14.   
  15.    
  16.   
  17. @property (weak, nonatomic) IBOutlet MKMapView *mapView;  
  18.   
  19.    
  20.   
  21. - (IBAction)geocodeQuery:(id)sender;  
  22.   
  23.    
  24.   
  25. @end  


由于使用Map Kit API,需要引入头文件<MapKit/MapKit.h>,头文件”MapLocation.h”是我们自己定义的描述地图标注点类。在定义ViewController时,还需要声明实现MKMapViewDelegate协议。txtQueryKey属性是查询关键字文本框,mapView属性是MKMapView类型,它与画面对应。点击查询按钮触发geocodeQuery:方法,它处理查询并在地图上做标注。

下面我看看ViewController.m的viewDidLoad方法代码:

  1. - (void)viewDidLoad  
  2.   
  3. {  
  4.   
  5. [super viewDidLoad];  
  6.   
  7. _mapView.mapType = MKMapTypeStandard;  
  8.   
  9. _mapView.delegate = self;  
  10.   
  11. }  


在viewDidLoad方法中设置地图的类型,它的类型有3种:

MKMapTypeStandard 标注地图类型。

MKMapTypeSatellite 卫星地图类型。在卫星地图中没有街道名称等信息;

MKMapTypeHybrid 混合地图类型。在混合地图是在卫星地图上标注出街道等信息;

3 4 5

viewDidLoad方法的_mapView.delegate = self语句是当前视图控制器赋值给地图视图的delegate属性,这样地图视图在需要的时候就会回调ViewController,如果失败,回调下面的失败方法:

  1. - (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {  
  2.   
  3. NSLog(@”error : %@”,[error description]);  
  4.   
  5. }  


跟踪用户位置变化

MapKit提供了跟踪用户位置和方向变化的API,我们不用自己编写定位服务代码。开启地图视图的showsUserLocation属性,并设置方法setUserTrackingMode:就可以了,代码如下:

  1. - (void)viewDidLoad  
  2.   
  3. {  
  4.   
  5. [super viewDidLoad];  
  6.   
  7. if ([CLLocationManager locationServicesEnabled])  
  8.   
  9. {  
  10.   
  11. _mapView.mapType = MKMapTypeStandard;  
  12.   
  13. _mapView.delegate = self;  
  14.   
  15. _mapView.showsUserLocation = YES;  
  16.   
  17. [_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];  
  18.   
  19. }  
  20.   
  21. }  


其中代码_mapView.showsUserLocation = YES,允许跟踪显示用户位置信息。在iOS设备中显示用户位置方式是一个发亮的蓝色小圆点。

7

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]语句设置用户跟踪模式,用户跟踪模式有3种:

MKUserTrackingModeNone 。没有用户跟踪模式;

MKUserTrackingModeFollow 。可以跟踪用户的位置变化;

MKUserTrackingModeFollowWithHeading 。可以跟踪用户的位置和方向变化;

然后,我们还需要实现地图视图委托方法mapView:didUpdateUserLocation:,它的代码如下:

  1. - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation  
  2.   
  3. {  
  4.   
  5. _mapView.centerCoordinate = userLocation.location.coordinate;  
  6.   
  7. }  


该委托方法在定位服务更新完成用户位置时候回调该方法,我们在该方法中重新调整地图的中心点为当前用户的中心点,其中_mapView.centerCoordinate = userLocation.location.coordinate语句就是实现该目的。

这几行代码就可以跟踪用户位置的变化了,但是为了这样一个小的案例拿着iPhone在外面跑一圈进行测试没有必要。可以使用模拟器测试,模拟器有几个固定的模式可以发出连续变化的数据。测试运行在画面中会有一个小圆圈,它按照我们设定的速度一直运行。

8

分享到:

相关资讯

  • 如何使用水经注万能地图下载器制作百度个性化地图-道路篇

    1. 概述水经注软件除了可以轻松下载无水印Google Earth卫星影像、有明确拍摄日期的历史影像、地方高清天地图、百度高德大字体打印地图,按1万/5千等国家标准图幅下载,对百度坐标与火星坐标进行纠偏;下载陆地及海洋高程、STRM高程、提取10米等高线等深线、CASS高程点之外,还…

    2019/12/23 16:31:58
  • 如何自定义分块导出大图

    当地图范围太大且级别太高时,导出拼接为单张大图后普通看图软件无法打开查看,即便是像ArcGIS或GlobalMapper等专业软件打开也非常困难。为了解决这一问题,本软提供了将大图自定义分块导出的功能。这里我们以成都市行政区划为例,说明如何自定分块导出大图。在视图中点击“下…

    2019/10/24 16:50:47
  • 如何在微图APP内查看三维地球

    说起三维地球,有了解的朋友都会第一时间想起 Google Earth,Google Earth 为用户提供了非常详细和绚丽的三维地球场景,但是Google Earth在国内能正常访问的是PC版,手机版无法查看。为了解决这一问题,水经注微图APP在上线不久之后便推出了三维地球的功能,方便用户查看三维地…

    2019/4/8 10:00:18
  • 青海省谷歌高清卫星地图下载(百度网盘离线包下载)

    一、概述  青海,简称青,省会西宁,位于中国西部,雄踞世界屋脊青藏高原的东北部,是中国青藏高原上的重要省份之一。青海省东西长约1200公里,南北宽800公里,面积为72.10万平方公里。境内山脉高耸,地形多样,河流纵横,湖泊棋布。昆仑山横贯中部,唐古拉山峙立于南,祁连…

    2018/8/23 16:18:41

共有0访客发表了评论 网友评论