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

2016-11-14  本文已影响0人  帅不过oneS

原文: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);}}}];}

上一篇 下一篇

猜你喜欢

热点阅读