iOS.定位服务与地图应用.04.使用iOS苹果地图

#import <MapKit/MapKit.h>



@interface MapLocation : NSObject<MKAnnotation>



//街道信息属性

@property (nonatomic, copy) NSString *streetAddress;

//城市信息属性

@property (nonatomic, copy) NSString *city;

//州、省、市信息

@property (nonatomic, copy) NSString *state;

//邮编

@property (nonatomic, copy) NSString *zip;

//地理坐标

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;



@end
#import "MapLocation.h"



@implementation MapLocation



- (NSString *)title {

    return @"您的位置!";

}

- (NSString *)subtitle {

    

    NSMutableString *ret = [NSMutableString new];

    if (_state)

        [ret appendString:_state];

    if (_city)

        [ret appendString:_city];

    if (_city && _state)

        [ret appendString:@", "];

    if (_streetAddress && (_city || _state || _zip))

        [ret appendString:@""];

    if (_streetAddress)

        [ret appendString:_streetAddress];

    if (_zip)

        [ret appendFormat:@", %@", _zip];

    

    return ret;

}





@end
#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>

#import <CoreLocation/CoreLocation.h>

#import "MapLocation.h"



@interface T20140621234700ViewController : UIViewController



@property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;



@property (weak, nonatomic) IBOutlet MKMapView *mapView;



- (IBAction)geocodeQuery:(id)sender;



@end
#import "T20140621234700ViewController.h"



@interface T20140621234700ViewController ()



@end



@implementation T20140621234700ViewController



- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    _mapView.mapType = MKMapTypeStandard;

    //    _mapView.mapType = MKMapTypeSatellite;

    _mapView.delegate = self;

}



- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}





- (IBAction)geocodeQuery:(id)sender {

    

    if (_txtQueryKey.text == nil || [_txtQueryKey.text length] == 0) {

        return;

    }

    

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    [geocoder geocodeAddressString:_txtQueryKey.text completionHandler:^(NSArray *placemarks, NSError *error) {

        

        NSLog(@"查询记录数:%i",[placemarks count]);

        

        if ([placemarks count] > 0) {

            [_mapView removeAnnotations:_mapView.annotations];

        }

        

        for (int i = 0; i < [placemarks count]; i++) {

            

            CLPlacemark* placemark = placemarks[i];

            

            //关闭键盘

            [_txtQueryKey resignFirstResponder];

            

            //调整地图位置和缩放比例

            MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, 10000, 10000);

            [_mapView setRegion:viewRegion animated:YES];

            

            MapLocation *annotation = [[MapLocation alloc] init];

            annotation.streetAddress = placemark.thoroughfare;

            annotation.city = placemark.locality;

            annotation.state = placemark.administrativeArea;

            annotation.zip = placemark.postalCode;

            annotation.coordinate = placemark.location.coordinate;

            

            [_mapView addAnnotation:annotation];

        }

    }];

    

}



#pragma mark -

#pragma mark Map View Delegate Methods

- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>) annotation {

    

    MKPinAnnotationView *annotationView

    = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"];

    if(annotationView == nil) {

        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation

                                                         reuseIdentifier:@"PIN_ANNOTATION"];

    }

    

    annotationView.pinColor = MKPinAnnotationColorPurple;

    annotationView.animatesDrop = YES;

    annotationView.canShowCallout = YES;

    

    return annotationView;

}



- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

{

    _mapView.centerCoordinate = userLocation.location.coordinate;

}



- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {

    NSLog(@"error : %@",[error description]);

}



@end

 

你可能感兴趣的:(ios)