iOS原生地图开发进阶——使用导航和附近兴趣点检索(一)

简介: iOS原生地图开发进阶——使用导航和附近兴趣点检索

iOS原生地图开发进阶——使用导航和附近兴趣点检索


iOS中的mapKit框架对国际化的支持非常出色。在前些篇博客中,对这个地图框架的基础用法和标注与覆盖物的添加进行了详细的介绍,这篇博客将介绍两个更加实用的功能的开发:线路导航与兴趣点搜索。前几篇博客的链接如下:


地图基础用法详解:http://my.oschina.net/u/2340880/blog/415360


添加大头针与自定义标注:http://my.oschina.net/u/2340880/blog/415441


添加地图覆盖物:http://my.oschina.net/u/2340880/blog/415611


一、线路导航


1、从几个类的关系说起


(1)MKPlacemark


一个地点信息类,如下:


@interface MKPlacemark : CLPlacemark <MKAnnotation>

//初始化方法,通过给定一个经纬度和地点信息字典

- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate

                addressDictionary:(NSDictionary *)addressDictionary;

//国家编码

@property (nonatomic, readonly) NSString *countryCode;

@end

(2)MKMapItem


地点节点类,包含此节点的许多地点信息,如下:


@interface MKMapItem : NSObject

//当前节点的地点信息对象

@property (nonatomic, readonly) MKPlacemark *placemark;

//是否是当前位置

@property (nonatomic, readonly) BOOL isCurrentLocation;

//节点名称

@property (nonatomic, copy) NSString *name;

//电话号码

@property (nonatomic, copy) NSString *phoneNumber;

//网址

@property (nonatomic, strong) NSURL *url;

//将当前位置创建为节点

+ (MKMapItem *)mapItemForCurrentLocation;

//由一个位置信息创建节点

- (instancetype)initWithPlacemark:(MKPlacemark *)placemark;


@end

(3)MKDirectionsRequest


导航请求类


@interface MKDirectionsRequest : NSObject

//起点节点

- (MKMapItem *)source NS_AVAILABLE(10_9, 6_0);

- (void)setSource:(MKMapItem *)source NS_AVAILABLE(10_9, 7_0);

//目的地节点

- (MKMapItem *)destination NS_AVAILABLE(10_9, 6_0);

- (void)setDestination:(MKMapItem *)destination NS_AVAILABLE(10_9, 7_0);


@end

这个类还有一些扩展的设置属性:



@property (nonatomic) MKDirectionsTransportType transportType;


设置路线检索类型,枚举如下:


typedef NS_OPTIONS(NSUInteger, MKDirectionsTransportType) {

   MKDirectionsTransportTypeAutomobile     = 1 << 0,//适合驾车时导航

   MKDirectionsTransportTypeWalking        = 1 << 1,//适合步行时导航

   MKDirectionsTransportTypeAny            = 0x0FFFFFFF//任何情况

};


@property (nonatomic) BOOL requestsAlternateRoutes;


设置是否搜索多条线路



@property (nonatomic, copy) NSDate *departureDate;


设置出发日期



@property (nonatomic, copy) NSDate *arrivalDate;


设置到达日期



(4)MKDirections


从apple服务器获取数据的连接类


@interface MKDirections : NSObject

//初始化方法

- (instancetype)initWithRequest:(MKDirectionsRequest *)request NS_DESIGNATED_INITIALIZER;

//开始计算线路信息

- (void)calculateDirectionsWithCompletionHandler:(MKDirectionsHandler)completionHandler;

//开始计算时间信息

- (void)calculateETAWithCompletionHandler:(MKETAHandler)completionHandler;

//取消

- (void)cancel;

//是否正在计算

@property (nonatomic, readonly, getter=isCalculating) BOOL calculating;

@end

(5)MKDirectionsResponse


线路信息结果类


@interface MKDirectionsResponse : NSObject

@property (nonatomic, readonly) MKMapItem *source;//起点

@property (nonatomic, readonly) MKMapItem *destination;//终点

@property (nonatomic, readonly) NSArray *routes; //线路规划数组

@end

(6)MKETResponse


时间信息结果类


@interface MKETAResponse : NSObject

@property (nonatomic, readonly) MKMapItem *source;//起点

@property (nonatomic, readonly) MKMapItem *destination;//终点

@property (nonatomic, readonly) NSTimeInterval expectedTravelTime;//耗时


@end

(7)MKRoute


线路信息类,导航的线路结果是这个类型的对象


@interface MKRoute : NSObject


@property (nonatomic, readonly) NSString *name; //线路名称

@property (nonatomic, readonly) NSArray *advisoryNotices; //注意事项

@property (nonatomic, readonly) CLLocationDistance distance; //距离

@property (nonatomic, readonly) NSTimeInterval expectedTravelTime;//耗时

@property (nonatomic, readonly) MKDirectionsTransportType transportType; //检索的类型


@property (nonatomic, readonly) MKPolyline *polyline; // 线路覆盖物


@property (nonatomic, readonly) NSArray *steps; // 线路详情数组


@end

(8)MKRouteStep


线路详情信息类,线路中每一步的信息都是这个类的对象


@interface MKRouteStep : NSObject


@property (nonatomic, readonly) NSString *instructions; // 节点信息

@property (nonatomic, readonly) NSString *notice; // 注意事项


@property (nonatomic, readonly) MKPolyline *polyline; //线路覆盖物


@property (nonatomic, readonly) CLLocationDistance distance; // 距离


@property (nonatomic, readonly) MKDirectionsTransportType transportType; // 导航类型


@end

目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
166 4
|
iOS开发
Flutter与iOS原生通信方式
Flutter与iOS原生通信方式
491 2
|
iOS开发
iOS MFMessageComposeViewController不显示取消按钮,导航条上白色,无取消按钮,无法返回应用...
iOS MFMessageComposeViewController不显示取消按钮,导航条上白色,无取消按钮,无法返回应用...
73 0
|
7月前
|
iOS开发
SwiftUI适配iOS16导航控制器引起的闪退
SwiftUI适配iOS16导航控制器引起的闪退
82 0
|
Android开发 iOS开发
iOS 逆向编程(四)实操 Jailbreak 进阶必备软件
iOS 逆向编程(四)实操 Jailbreak 进阶必备软件
106 0
|
iOS开发
iOS 15后设置导航控制器的导航条背景色无效的问题处理
iOS 15后设置导航控制器的导航条背景色无效的问题处理
505 0
|
7月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
Dart 开发工具 Android开发
Flutter与iOS原生混合开发
Flutter与iOS原生混合开发
464 2
|
缓存 JavaScript iOS开发
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
194 0
|
Android开发 iOS开发
iOS 逆向编程(四)实操越狱进阶必备软件
iOS 逆向编程(四)实操越狱进阶必备软件
109 0