iOS MapKit导航及地理转码辅助类
2014-04-27 17:31
381 查看
头文件:
实现文件:
测试用例:
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface DirectionRouteUtils : NSObject { MKDirections *mDirections; CLGeocoder *mGeocoder; } + (instancetype)sharedInstance; // 获取导航路线 - (void)findDirectionsFrom:(MKMapItem *)source to:(MKMapItem *)destination handler:(MKDirectionsHandler)completionHandler; - (void)findDirectionsFrom:(MKMapItem *)source to:(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" @implementation DirectionRouteUtils + (instancetype)sharedInstance { static DirectionRouteUtils *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[[self class] alloc] init]; }); return sharedInstance; } - (id)init { if (self = [super init]) { mGeocoder = [[CLGeocoder alloc] init]; } return self; } - (void)findDirectionsFrom:(MKMapItem *)source to:(MKMapItem *)destination transportType:(MKDirectionsTransportType)transportType handler:(MKDirectionsHandler)completionHandler { NSAssert(completionHandler != nil, @"Calculating directions handler shouldn't be nil!"); [self cancelCalculateDirections]; MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; request.source = source; request.destination = destination; request.requestsAlternateRoutes = YES; request.transportType = transportType; //MKDirectionsTransportTypeAutomobile;//MKDirectionsTransportTypeWalking; mDirections = [[MKDirections alloc] 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 *)source to:(MKMapItem *)destination handler:(MKDirectionsHandler)completionHandler { [self findDirectionsFrom:source to:destination transportType:MKDirectionsTransportTypeAutomobile handler: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!"); [self cancelGeocode]; [mGeocoder geocodeAddressString:addressString completionHandler:completionHandler]; } - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler { NSAssert(completionHandler != nil, @"Reversegeocoding handler shouldn't be nil!"); [self cancelGeocode]; [mGeocoder reverseGeocodeLocation:location completionHandler:completionHandler]; } @end
测试用例:
- (void)testGeocoding { DirectionRouteUtils *utils = [DirectionRouteUtils sharedInstance]; [utils geocodeAddressString:@"你要测试的地址" completionHandler:^(NSArray *placemarks, NSError *error) { for(CLPlacemark *mark in placemarks){ NSLog(@"%@", mark.addressDictionary); } }]; } - (void)testReverseGeocoding { DirectionRouteUtils *utils = [DirectionRouteUtils sharedInstance]; CLLocation *location = [[CLLocation alloc] initWithLatitude:24.6182746 longitude:118.131588]; [utils reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { for(CLPlacemark *mark in placemarks){ NSLog(@"%@", mark.addressDictionary); NSLog(@"%@", mark); } }]; [location release]; } - (void)testDirections { CLLocationCoordinate2D fromCoordinate = CLLocationCoordinate2DMake(24.6382086, 118.131588); CLLocationCoordinate2D toCoordinate = CLLocationCoordinate2DMake(24.6182746, 118.131588); MKPlacemark *fromPlacemark = [[MKPlacemark alloc] initWithCoordinate:fromCoordinate addressDictionary:nil]; MKPlacemark *toPlacemark = [[MKPlacemark alloc] initWithCoordinate:toCoordinate addressDictionary:nil]; MKMapItem *fromItem = [[MKMapItem alloc] initWithPlacemark:fromPlacemark]; MKMapItem *toItem = [[MKMapItem alloc] 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 *step in route.steps) { NSLog(@"Step: %@", ((MKRouteStep *)step).instructions); } } }]; }
相关文章推荐
- ios-表视图-demo1
- ios 登录框
- iOSOpenDev环境搭建以及使用
- iOS开发笔记--导致EXC_BAD_ACCESS问题的原因
- 用iOS写一个生成单例的方法
- 使用Xcode和Instruments调试解决iOS内存泄露
- iOS 图片加载方法
- IOS 本地通知
- wzplayer for ios 针对(mms)优化版本V1.0
- wzplayer for ios 针对(mms)优化版本V1.0
- iOS检查汉字输入的方法集
- iOS开发何如在调试的时候轻松找到程序在哪里崩溃
- 增强iOS应用程序性能的提示和技巧
- 【IOS】xcode调试命令收集
- ios程序开发杂记
- 【iOS知识学习】_iOS中Json解析的四种方法
- iOS7新特征
- Responder Chain(ios事件传递)
- iOS中消息的传递机制
- iOS6后的内存警告处理