.h
-------------------------------------------------------------------------------------------
//
// ViewController.h
// MyMap
//
// Created by tian on 13-11-18.
// Copyright (c) 2013年 cq. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface ViewController :UIViewController<MKMapViewDelegate>
@property (weak, nonatomic) IBOutletUITextField *txtQueryKey;
@property (weak, nonatomic) IBOutletMKMapView *mapView;
- (IBAction)geocodeQuery:(id)sender;
@end
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//
// ViewController.m
// MyMap
//
// Created by tian on 13-11-18.
// Copyright (c) 2013年 cq. All rights reserved.
//
#import "ViewController.h"
#import "MapLocation.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
;
if ([CLLocationManagerlocationServicesEnabled]) {
self.mapView.mapType = MKMapTypeStandard;
self.mapView.delegate =self;
self.mapView.showsUserLocation =YES;
[self.mapViewsetUserTrackingMode:MKUserTrackingModeFollowanimated:YES];
}
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)geocodeQuery:(id)sender { //标注动作 进行地理信息编码
if (self.txtQueryKey.text ==nil || self.txtQueryKey.text.length ==0) {
return;
}
CLGeocoder *geocoder = [[CLGeocoderalloc] init];
[geocodergeocodeAddressString:self.txtQueryKey.textcompletionHandler:^(NSArray *placemarks,NSError *error){//地理信息编码
NSLog(@"查询记录数:%i",[placemarks count]);
if ([placemarks count] >0) {
[_mapViewremoveAnnotations:self.mapView.annotations];
}
for (int i=0; i < [placemarkscount]; i++) {
CLPlacemark *placemark = placemarks[i];
//关闭键盘
[self.txtQueryKeyresignFirstResponder];
//调整地图位置和缩放比例
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate,10000, 10000);//placemark指定了目标区域的中心点,第二个参数 南北的跨度,第三个参数目标区域的东西跨度
[self.mapViewsetRegion:viewRegion animated:YES];//重新设置地图视图的显示区域
/*
地标对象CLPlacemark对象取出,放入到MapLocation对象中
*/
//MKPinAnnotationView视图中,只能接受MKAnnotation协议类,而地标类CLPlacemark没有实现MKAnnotation协议
MapLocation *annotation = [[MapLocationalloc] init]; //地图标注点类
annotation.streetAddress = placemark.thoroughfare;
annotation.city = placemark.locality;
annotation.state = placemark.administrativeArea;
annotation.zip = placemark.postalCode;
annotation.coordinate = placemark.location.coordinate;
[self.mapViewaddAnnotation:annotation];//把标注点 MapLocation对象添加到地图视图上。一旦该方法被调用,地图视图委托方法mapView:viewForAnnotaion:就会被回调
}
}];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ //给地图添加标注是被回调
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[self.mapViewdequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationViewalloc] initWithAnnotation:annotationreuseIdentifier:@"PIN_ANNOTATION"];
}
annotationView.pinColor =MKPinAnnotationColorPurple; //大头针颜色是紫色
annotationView.animatesDrop =YES; //添加标注时,以动画的形式显示
annotationView.canShowCallout =YES; //点击大头针,会出现一个气泡
return annotationView;
}
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error{
NSLog(@"error:%@",[errordescription]);
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
self.mapView.centerCoordinate = userLocation.location.coordinate;
}
@end
标注
.h
-----------------------------------------------------------------------------------------------
//
// MapLocation.h
// MyMap
//
// Created by tian on 13-11-18.
// Copyright (c) 2013年 cq. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface MapLocation :NSObject<MKAnnotation>
//@property (nonatomic,readwrite) CLLocationCoordinate2D coordinate;
@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
------------------------------------------------------------------------------------
//
// MapLocation.m
// MyMap
//
// Created by tian on 13-11-18.
// Copyright (c) 2013年 cq. All rights reserved.
//
#import "MapLocation.h"
@implementation MapLocation
- (NSString *)title{
return@"你的位置";
}
- (NSString *)subtitle{
NSMutableString *ret = [NSMutableStringnew];
if (self.state) {
[retappendString:self.state];
}
if (self.city) {
[retappendString:self.city];
}
if (self.city &&self.state) {
[retappendString:@","];
}
if (self.streetAddress && (self.city ||self.state ||self.zip)) {
[retappendString:@"。"];
}
if (self.streetAddress) {
[retappendString:self.streetAddress];
}
if (self.zip) {
[retappendFormat:@", %@",self.zip];
}
return ret;
}
@end