您的位置:首页 > 其它

系统地图的用法

2015-03-21 21:23 190 查看
1, 引用框架 CoreGraphics.framework MapKit.framework CoreLocation.framework

2 导入主头文件 iOS5之后不需要手动导入

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>

(1)MapKit :用于地图展示

(2)CoreLocation :用于地理定位

CoreLocation框架使用须知

(1) Corelocation框架中所有数据类型的前缀都是CL

(2) Corelocation中使用的CLLocationManager对象来做用户定位

这是初始化

locationManager = [[CLLocationManager alloc] init];//初始化

locationManager.delegate = self;//委托自己

locationManager.desiredAccuracy = kCLLocationAccuracyBest;//精度设定

[locationManager startUpdatingLocation];//开启位置更新

定义经纬坐标

CLLocationCoordinate2D theCoordinate;

theCoordinate.latitude=21.238928; 经度

theCoordinate.longitude=113.313353;纬度

//

// ViewController.m

// MapStudy

//

// Created by lanouhn on 15/3/21.

// Copyright (c) 2015年 niutiantian. All rights reserved.

//

#import "ViewController.h"

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>

#import "Annotation.h"

@interface ViewController ()<MKMapViewDelegate, CLLocationManagerDelegate[CDATA[]]>

{

//用来做用户定位

CLLocationManager *locationManeger;

CLLocation *location;

CLGeocoder *geocoder; //反向地理编码

CLLocationCoordinate2D coordinate; //地理位置坐标

MKMapView *_mapView;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

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

//添加地图

_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];

_mapView.delegate = self;

[self.view addSubview:_mapView];

//定位管理器

locationManeger = [[CLLocationManager alloc] init];

//定位管理器没有打开

if (![CLLocationManager locationServicesEnabled]) {

NSLog(@"请打开定位");

return;

}

//请求用户授权

//kCLAuthorizationStatusNotDetermined 未授权

//kCLAuthorizationStatusAuthorizedWhenInUse 授权

if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {

[locationManeger requestWhenInUseAuthorization];
} else if ([CLLocationManager authorizationStatus]== kCLAuthorizationStatusAuthorizedWhenInUse) {
//设置代理
locationManeger.delegate = self;
locationManeger.desiredAccuracy = kCLLocationAccuracyBest;//精度设定
[locationManeger startUpdatingLocation]; //开启位置更新
}

_mapView.userTrackingMode = YES;//用户追踪当前位置
//设置地图类型
_mapView.mapType = MKMapTypeStandard;

//coordinate.latitude coordinate.latitude 经度 纬度
// CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.latitude ];

}

#pragma mark - MKMapViewDelegate

#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
location = [locations firstObject];
coordinate = location.coordinate;
//地理位置反编码
geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *placeMark = [placemarks firstObject];
NSLog(@"%@", placeMark.addressDictionary);
}];
//添加标记大头针
[self addAnnotation];

}

- (void)addAnnotation {
NSLog(@"%f", coordinate.latitude);
Annotation *annotation1 = [[Annotation alloc] init];
annotation1.title = @"CMJ Studio";
annotation1.subTitle = @"Kenshin Cui's Studios";
annotation1.coordinate = coordinate;
[_mapView addAnnotation:annotation1];

}

-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[locationManeger stopUpdatingLocation];
}

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

@end

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface Annotation : NSObject<MKAnnotation[CDATA[]]>

@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subTitle;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: