[x-Code7新功能之四]Core Location和MapKit框架练习

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>

@interface MyAnnotication : NSObject<MKAnnotation>

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@end


@interface ViewController : UIViewController<CLLocationManagerDelegate,MKMapViewDelegate>


@end
#import "ViewController.h"

@implementation MyAnnotication

@end

@interface ViewController ()

@end

@implementation ViewController{
    CLLocationManager* _Manager;
    CLGeocoder* _Geocoder;
    CLLocation* _MyLocation;
    MKMapView* _MapView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    _Manager = [[CLLocationManager alloc] init];
    _MapView = [[MKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    _MapView.delegate = self;
    _MapView.userTrackingMode = MKUserTrackingModeFollow;
    [self.view addSubview:_MapView];
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位功能还没有打开");
        return;
    }
    CLAuthorizationStatus state = [CLLocationManager authorizationStatus];
    if (state ==kCLAuthorizationStatusNotDetermined){
        [_Manager requestWhenInUseAuthorization];
    }
    else if (state == kCLAuthorizationStatusAuthorizedWhenInUse){
        _Manager.delegate = self;
        _Manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
        CLLocationDistance distance = 10.0;
        _Manager.distanceFilter = distance;
        [_Manager startUpdatingLocation];
    }
    
    
    _Geocoder = [[CLGeocoder alloc] init];
    
    /*地理编码测试*/
//    [_Geocoder geocodeAddressString:@"昌平区沙河镇" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
//        [placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//            CLLocation* Location = obj.location;
//            CLRegion* Region = obj.region;
//            NSData* data = [NSJSONSerialization dataWithJSONObject:obj.addressDictionary options:NSJSONWritingPrettyPrinted error:nil];
//            NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//            NSLog(@"位置:%@,区域:%@,详细信息:%@",Location,Region,str);
//        }];
//    }];
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    _MyLocation = [locations firstObject];
    CLLocationCoordinate2D FirstCoordinate = [_MyLocation coordinate];
    NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",FirstCoordinate.longitude,FirstCoordinate.latitude,_MyLocation.altitude,_MyLocation.course,_MyLocation.speed);
    /*地理反编码测试~*/
    [_Geocoder reverseGeocodeLocation:_MyLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        CLPlacemark *placemark=[placemarks firstObject];
        NSData* data = [NSJSONSerialization dataWithJSONObject:placemark.addressDictionary options:NSJSONWritingPrettyPrinted error:nil];
        NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        MyAnnotication *annotation1=[[MyAnnotication alloc]init];
        annotation1.title=[placemark.addressDictionary valueForKey:@"Name"];
        annotation1.subtitle=[placemark.addressDictionary valueForKey:@"SubLocality"];
        annotation1.coordinate=FirstCoordinate;
        [_MapView addAnnotation:annotation1];
        
        /*定位一次后,关闭*/
        [_Manager stopUpdatingLocation];
        NSLog(@"详细信息:%@",str);
    }];

}

-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    static NSString* ViewIdentifer = @"ViewIdentifer";
    if ([annotation isKindOfClass:[MyAnnotication class]]) {
        MKAnnotationView* AnnotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:ViewIdentifer];
        if (!AnnotationView) {
            AnnotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:ViewIdentifer];
            AnnotationView.canShowCallout = YES;/*允许用户点击*/
            AnnotationView.calloutOffset = CGPointMake(0, 1);
            AnnotationView.leftCalloutAccessoryView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"J.jpg"]];
            /*如果不设置这个值,什么都看不到~*/
            AnnotationView.image = [UIImage imageNamed:@"J.jpg"];
        }
        return AnnotationView;
    }
    else{
        return nil;
    }
   
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

定位效果还挺理想,不错啊。

想利用这个写个移动签到的小程序。。。

参考:http://www.cnblogs.com/kenshincui/p/4125570.html

你可能感兴趣的:(框架,MapKit)