美文网首页
iOS MapKit导航及地理转码辅助类

iOS MapKit导航及地理转码辅助类

作者: 帅不过oneS | 来源:发表于2016-11-14 16:09 被阅读0次

原文:http://blog.csdn.net/aldridge1/article/details/24595383

头文件:

#import#import@interfaceDirectionRouteUtils:NSObject{MKDirections*mDirections;CLGeocoder*mGeocoder;}+ (instancetype)sharedInstance;// 获取导航路线- (void)findDirectionsFrom:(MKMapItem*)sourceto:(MKMapItem*)destination handler:(MKDirectionsHandler)completionHandler;- (void)findDirectionsFrom:(MKMapItem*)sourceto:(MKMapItem*)destination transportType:(MKDirectionsTransportType)transportType handler:(MKDirectionsHandler)completionHandler;- (void)cancelCalculateDirections;// 地理转码- (void)cancelGeocode;- (void)geocodeAddressString:(NSString*)addressString    completionHandler:(CLGeocodeCompletionHandler)completionHandler;- (void)reverseGeocodeLocation:(CLLocation*)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;@end

实现文件:

#import"DirectionRouteUtils.h"@implementationDirectionRouteUtils+ (instancetype)sharedInstance{staticDirectionRouteUtils *sharedInstance =nil;staticdispatch_once_tonceToken;dispatch_once(&onceToken, ^{sharedInstance = [[[selfclass] alloc] init];});returnsharedInstance;}- (id)init{if(self= [superinit]) {mGeocoder = [[CLGeocoderalloc] init];}returnself;}- (void)findDirectionsFrom:(MKMapItem*)sourceto:(MKMapItem*)destination transportType:(MKDirectionsTransportType)transportType  handler:(MKDirectionsHandler)completionHandler{NSAssert(completionHandler !=nil,@"Calculating directions handler shouldn't be nil!");[selfcancelCalculateDirections];MKDirectionsRequest*request = [[MKDirectionsRequestalloc] init];request.source = source;request.destination = destination;request.requestsAlternateRoutes =YES;request.transportType = transportType;//MKDirectionsTransportTypeAutomobile;//MKDirectionsTransportTypeWalking;mDirections = [[MKDirectionsalloc] initWithRequest:request];[request release];/*

[directions calculateDirectionsWithCompletionHandler:

^(MKDirectionsResponse *response, NSError *error) {

if (error) {

NSLog(@"error:%@", error);

}

else {

NSLog(@"%@", response.routes);

MKRoute *route = response.routes[0];

for(MKRoute *step in route.steps)

{

NSLog(@"Step: %@", ((MKRouteStep *)step).instructions);

}

[self.mapView addOverlay:route.polyline];

}

}];

*/if(completionHandler){[mDirections calculateDirectionsWithCompletionHandler:completionHandler];}}- (void)findDirectionsFrom:(MKMapItem*)sourceto:(MKMapItem*)destination  handler:(MKDirectionsHandler)completionHandler{[selffindDirectionsFrom:source  to:destination  transportType:MKDirectionsTransportTypeAutomobilehandler:completionHandler];}- (void)cancelCalculateDirections{if(mDirections){[mDirections cancel];[mDirections release];mDirections =nil;}}- (void)cancelGeocode{[mGeocoder cancelGeocode];}- (void)geocodeAddressString:(NSString*)addressString  completionHandler:(CLGeocodeCompletionHandler)completionHandler{NSAssert(completionHandler !=nil,@"Geocoding handler shouldn't be nil!");[selfcancelGeocode];[mGeocoder geocodeAddressString:addressString  completionHandler:completionHandler];}- (void)reverseGeocodeLocation:(CLLocation*)location completionHandler:(CLGeocodeCompletionHandler)completionHandler{NSAssert(completionHandler !=nil,@"Reversegeocoding handler shouldn't be nil!");[selfcancelGeocode];[mGeocoder reverseGeocodeLocation:locationcompletionHandler:completionHandler];}@end

测试用例:

- (void)testGeocoding{DirectionRouteUtils *utils = [DirectionRouteUtils sharedInstance];[utils geocodeAddressString:@"你要测试的地址"completionHandler:^(NSArray*placemarks,NSError*error) {for(CLPlacemark*markinplacemarks){NSLog(@"%@", mark.addressDictionary);}}];}- (void)testReverseGeocoding{DirectionRouteUtils *utils = [DirectionRouteUtils sharedInstance];CLLocation*location = [[CLLocationalloc] initWithLatitude:24.6182746longitude:118.131588];[utils reverseGeocodeLocation:location completionHandler:^(NSArray*placemarks,NSError*error) {for(CLPlacemark*markinplacemarks){NSLog(@"%@", mark.addressDictionary);NSLog(@"%@", mark);}}];[location release];}- (void)testDirections{CLLocationCoordinate2DfromCoordinate =CLLocationCoordinate2DMake(24.6382086,118.131588);CLLocationCoordinate2DtoCoordinate  =CLLocationCoordinate2DMake(24.6182746,118.131588);MKPlacemark*fromPlacemark = [[MKPlacemarkalloc] initWithCoordinate:fromCoordinate  addressDictionary:nil];MKPlacemark*toPlacemark  = [[MKPlacemarkalloc] initWithCoordinate:toCoordinate  addressDictionary:nil];MKMapItem*fromItem = [[MKMapItemalloc] initWithPlacemark:fromPlacemark];MKMapItem*toItem  = [[MKMapItemalloc] initWithPlacemark:toPlacemark];DirectionRouteUtils *utils = [DirectionRouteUtils sharedInstance];[utils findDirectionsFrom:fromItem to:toItem handler:^(MKDirectionsResponse*response,NSError*error) {if(error) {NSLog(@"error:%@", error);}else{NSLog(@"%@", response.routes);MKRoute*route = response.routes[0];for(MKRoute*stepinroute.steps){NSLog(@"Step: %@", ((MKRouteStep*)step).instructions);}}}];}

相关文章

  • iOS MapKit导航及地理转码辅助类

    原文:http://blog.csdn.net/aldridge1/article/details/2459538...

  • 地理编码 与 路线导航__MapKit

    一、地理编码 1.导入定位框架 2.声明CLGeocoder对象,以及相关的数据操作源 3.初始化对象 4.进行地...

  • iOS基础-系统地图使用

    地图开发注意: 项目中必须添加MapKit/MapKit框架 地图导航注意: 设置起点和终点 设置导航参数 通过M...

  • 记一次FFmpeg的编译过程的坑

    参考文章:iOS开发 - 超详细集成 FFmpeg 步骤 iOS集成FFmpeg及视频格式转码 以...

  • UI细节问题

    1 iOS 导航栏导致scrollView类视图自动便宜问题 (iOS 11 导航栏 automaticallyA...

  • iOS Mapkit的使用

    【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等 标签:iOS地图mapkit 1.显示地图 (1)首...

  • iOS Mapkit URL跳转导航

    自己做地图应用导航没有特殊要求现在一般都是用URL跳转手机内地图app导航,这样做的好处有很多,不多介绍,看看主流...

  • 地图之简单认识相关类及方法

    目录 百度地图相关类及方法1.基础创建及相关使用类2.发起导航算路(即开始导航)、导航中改变终点重新导航3.移除和...

  • ByteBuf及辅助类

    ByteBuf 1.对比ByteBuffer a. ByteBuffer长度固定,容量不能动态扩展和收缩;b. B...

  • MapKit

    一、了解 MapKit框架提供地图的显示、导航、地点标注、增加图层等。利用MapKit可以集成一个全功能地图到ap...

网友评论

      本文标题:iOS MapKit导航及地理转码辅助类

      本文链接:https://www.haomeiwen.com/subject/ofihpttx.html