Core Location實現定位

2013/4/22記錄:git

 

注意:如非必要,不該該屢次輪詢位置信息i
使用時,可根據須要制定精度,經過仔細制定所需的絕對最低精度級別,能夠紡織沒必要要的電池消耗。 
 
導入:CoreLocation.framework
導入頭文件:#import <CoreLocation/CoreLocation.h>
實現CLLocationManagerDelegate協議
 
   self.locationManager= [[CLLocationManager alloc] init];    //位置管理器實例
    locationManager.delegate = self;    //設置委託
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;  //設置請求制定精度級別,精度越高越耗電
    [locationManager startUpdatingLocation];    //啓動

回調方法:spa

#pragma mark -
#pragma mark CLLocationManagerDelegate Methods
//當這個實施時下面那個就失效。
//- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
//    
//}
- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {
   
    if (startingPoint == nil)   //若是沒有開始座標,選擇剛定位到的座標做爲開始座標
        self.startingPoint = newLocation;
   
    //緯度值
    NSString *latitudeString = [NSStringstringWithFormat:@"%g\u00B0",
                                newLocation.coordinate.latitude];   //「\u00B0」:角度符的Unicode表示形式
    latitudeLabel.text = latitudeString;
   
    //經度值
    NSString *longitudeString = [NSStringstringWithFormat:@"%g\u00B0",
                                 newLocation.coordinate.longitude];
    longitudeLabel.text = longitudeString;
   
    //以coordinate爲中心的圓的半徑
    NSString *horizontalAccuracyString = [NSStringstringWithFormat:@"%gm",
                                          newLocation.horizontalAccuracy];
    horizontalAccuracyLabel.text = horizontalAccuracyString;
   
    //海拔
    NSString *altitudeString = [NSStringstringWithFormat:@"%gm",
                                newLocation.altitude];
    altitudeLabel.text = altitudeString;
   
    //海拔方面的精度
    NSString *verticalAccuracyString = [NSStringstringWithFormat:@"%gm",
                                        newLocation.verticalAccuracy];
    verticalAccuracyLabel.text = verticalAccuracyString;
   
    //更新位置的時間戳
    NSLog(@"%lf\n",newLocation.timestamp.timeIntervalSince1970);
   
    //兩位置距離
    CLLocationDistance distance = [newLocation
                                   distanceFromLocation:startingPoint];
    NSString *distanceString = [NSStringstringWithFormat:@"%gm", distance];
    distanceTraveledLabel.text = distanceString;
   
    //中止
    [self.locationManager stopUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error {
    NSString *errorType = (error.code == kCLErrorDenied) ?
    @"Access Denied" : @"Unknown Error";
    UIAlertView *alert = [[UIAlertViewalloc]
                          initWithTitle:@"Error getting Location"
                          message:errorType
                          delegate:nil
                          cancelButtonTitle:@"Okay"
                          otherButtonTitles:nil];
    [alert show];
}
相關文章
相關標籤/搜索