原文: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);}}}];}
网友评论