定位和反查位置信息要加载两个动态库 CoreLocation.framework 和 MapKit.framework 一个获取坐标一个提供反查
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
// appDelgate.h
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,CLLocationManagerDelegate,MKReverseGeocoderDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
//
// AppDelegate.m
// location
//
// Copyright (c) 2013年 TestApp. All rights reserved.
//
#import "AppDelegate.h"
@implementation AppDelegate
- (
BOOL
)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
button.frame = CGRectMake(0, 100, 100, 30);
[button setTitle:@
"定位"
forState:UIControlStateNormal];
[button addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 150, 320, 30)];
label.tag = 101;
label.text = @
"等待定位中...."
;
[self.window addSubview:label];
[label release];
[self.window addSubview:button];
return
YES;
}
-(
void
) test {
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
// 设置定位精度,十米,百米,最好
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
locationManager.delegate = self;
// 开始时时定位
[locationManager startUpdatingLocation];
}
// 错误信息
-(
void
)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@
"error"
);
}
// 6.0 以上调用这个函数
-(
void
)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
NSLog(@
"%d"
, [locations count]);
CLLocation *newLocation = locations[0];
CLLocationCoordinate2D oldCoordinate = newLocation.coordinate;
NSLog(@
"旧的经度:%f,旧的纬度:%f"
,oldCoordinate.longitude,oldCoordinate.latitude);
// CLLocation *newLocation = locations[1];
// CLLocationCoordinate2D newCoordinate = newLocation.coordinate;
// NSLog(@"经度:%f,纬度:%f",newCoordinate.longitude,newCoordinate.latitude);
// 计算两个坐标距离
// float distance = [newLocation distanceFromLocation:oldLocation];
// NSLog(@"%f",distance);
[manager stopUpdatingLocation];
//------------------位置反编码---5.0之后使用-----------------
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:newLocation
completionHandler:^(NSArray *placemarks, NSError *error){
for
(CLPlacemark *place in placemarks) {
UILabel *label = (UILabel *)[self.window viewWithTag:101];
label.text = place.name;
NSLog(@
"name,%@"
,place.name);
// 位置名
// NSLog(@"thoroughfare,%@",place.thoroughfare); // 街道
// NSLog(@"subThoroughfare,%@",place.subThoroughfare); // 子街道
// NSLog(@"locality,%@",place.locality); // 市
// NSLog(@"subLocality,%@",place.subLocality); // 区
// NSLog(@"country,%@",place.country); // 国家
}
}];
}
// 6.0 调用此函数
-(
void
)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSLog(@
"%@"
, @
"ok"
);
}
@end
|