你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 在iOS App中完成地輿地位定位的根本辦法解析

在iOS App中完成地輿地位定位的根本辦法解析

編輯:IOS開發綜合

IOS體系自帶的定位辦事可以完成許多需求。好比:獲得以後經緯度,獲得以後地位信息等等。
其定位有3種方法:
1,GPS,最准確的定位方法
2,蜂窩基站三角定位,這類定位在旌旗燈號基站比擬秘笈的城市比擬精確。
3,Wifi,這類方法貌似是經由過程收集運營商的數據庫獲得的數據,在3種定位種最不准確

起首你要在你的Xcode中添加兩個銜接庫,MapKit和CoreLocation,如圖

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615531291.jpg (856×368)

core location供給了定位功效,能定位裝配確當前坐標,同時能獲得裝配挪動信息,最主要的類是CLLocationManager,定位治理。
IOS8開端,Core Location framework的變更重要有以下幾點:
1. 在定位狀況中引入Always 和WhenInUse的概念。
2. 參加Visit monitoring的特征, 這類特征特殊合適觀光種別的運用,當用戶達到某個指定的區域內,monitor開端感化。
3.參加室內定位技巧,增長CLFloor, 在室內可以獲得樓層信息。

獲得以後經緯度

起首導入#import <CoreLocation/CoreLocation.h>,界說CLLocationManager的實例,完成CLLocationManagerDelegate。

@interface ViewController ()<CLLocationManagerDelegate>
{
    CLLocationManager *_locationManager;
}

@end

開端定位的辦法:

- (void)startLocating
{
    if([CLLocationManager locationServicesEnabled])
    {
        _locationManager = [[CLLocationManager alloc] init];
        //設置定位的精度
        [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        _locationManager.distanceFilter = 100.0f;
        _locationManager.delegate = self;
        if ([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0)
        {
            [_locationManager requestAlwaysAuthorization];
            [_locationManager requestWhenInUseAuthorization];
        }
        //開端及時定位
        [_locationManager startUpdatingLocation];
    }
}

完成署理辦法:

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    NSLog(@"Longitude = %f", manager.location.coordinate.longitude);
    NSLog(@"Latitude = %f", manager.location.coordinate.latitude);
    [_locationManager stopUpdatingLocation];
}

獲得以後地位信息

在下面的署理辦法中

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    NSLog(@"Longitude = %f", manager.location.coordinate.longitude);
    NSLog(@"Latitude = %f", manager.location.coordinate.latitude);
    [_locationManager stopUpdatingLocation];

    CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
    [geoCoder reverseGeocodeLocation:manager.location completionHandler:^(NSArray *placemarks, NSError *error) {
        for (CLPlacemark * placemark in placemarks) {
            NSDictionary *test = [placemark addressDictionary];
            //  Country(國度)  State(城市)  SubLocality(區)
            NSLog(@"%@", [test objectForKey:@"Country"]);
            NSLog(@"%@", [test objectForKey:@"State"]);
            NSLog(@"%@", [test objectForKey:@"SubLocality"]);
            NSLog(@"%@", [test objectForKey:@"Street"]);
        }
    }];

}

如許就很簡略獲得了以後地位的具體信息。

獲得某一個所在的經緯度

- (void)getLongitudeAndLatitudeWithCity:(NSString *)city
{
    //city可認為中文
    NSString *oreillyAddress = city;
    CLGeocoder *myGeocoder = [[CLGeocoder alloc] init];
    [myGeocoder geocodeAddressString:oreillyAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        if ([placemarks count] > 0 && error == nil)
        {
            NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);
            CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];
            NSLog(@"Longitude = %f", firstPlacemark.location.coordinate.longitude);
            NSLog(@"Latitude = %f", firstPlacemark.location.coordinate.latitude);
        }
        else if ([placemarks count] == 0 && error == nil)
        {
            NSLog(@"Found no placemarks.");
        }
        else if (error != nil)
        {
            NSLog(@"An error occurred = %@", error);
        }
    }];
}

盤算兩個所在之間的間隔

- (double)distanceByLongitude:(double)longitude1 latitude:(double)latitude1 longitude:(double)longitude2 latitude:(double)latitude2{
    CLLocation* curLocation = [[CLLocation alloc] initWithLatitude:latitude1 longitude:longitude1];
    CLLocation* otherLocation = [[CLLocation alloc] initWithLatitude:latitude2 longitude:longitude2];
    double distance  = [curLocation distanceFromLocation:otherLocation];//單元是m
    return distance;
}

起首我們可以用下面的getLongitudeAndLatitudeWithCity辦法獲得某一個所在的經緯度。好比我們獲得北京和上海的經緯度分離為:北京Longitude = 116.405285,Latitude = 39.904989 上海Longitude = 121.472644, Latitude = 31.231706, 那末北京和上海之間的間隔就是:

double distance = [self distanceByLongitude:116.405285 latitude:39.904989 longitude:121.472644 latitude:31.231706];
NSLog(@"Latitude = %f", distance);

盤算的是年夜概的間隔,能夠沒有那末精准。輸出成果為:

distance = 1066449.749194

【在iOS App中完成地輿地位定位的根本辦法解析】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved