定位和位置信息获取
定位和反查位置信息要加载两个动态库 CoreLocation.framework 和 MapKit.framework 一个获取坐标一个提供反查
// 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
#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
转换为火星坐标
这个写的公共类叫做:GPScombineClass类主要展示GPS位置的定位,GPS坐标的获取,然后从手机坐标转换成火星坐标,继而在需要的情况下,由火星转百度 ,百度转火星的详细算法;
在GPScombineClass.h中
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import \"CSqlite.h\"
#import <MapKit/MapKit.h>
@interface GPScombineClass : NSObject<MKMapViewDelegate>{
CLLocationManager *locationManager;
CSqlite *m_sqlite;
UILabel *m_locationName;
MKMapView *mainMapView;
@public CLLocationCoordinate2D baidulocation;
CLLocationCoordinate2D deleeverLocation;
}
-(void)OpenGPSmapView;
//在地图上放上自己的位置--外接接口
-(void)setMyMapPonitByMKMapView:(MKMapView *)MyMap;
@end