日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS一次定位解决方案(基于高德iOS SDK)

發布時間:2024/7/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS一次定位解决方案(基于高德iOS SDK) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

部分LBS應用,在打開app時獲取當前的準確位置就能滿足要求,一直開著定位,不僅會浪費流量也費電,所以這里給大家推薦一個一次定位的解決方法。

步驟如下:

1.開啟定位,請求獲取位置信息。(注意:iOS定位需要去請求定位權限,在info.plist中添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段)

2.在定位回調中對返回的位置信息做一些處理,保證位置信息的準確性。

? ?a)位置信息可能有緩存,所以要判斷一下時間。

? ?b)iOS的定位是越定越準的(即:進回調的次數越多,定位的精確度越高),所以要判斷位置的水平精度是否有效。

? ?c)不同的業務場景,對定位的精準度要求不一樣,比如:在室外叫出租車,希望司機能準備的看到我的位置,這時候需要與當前位置偏差越小越好;在辦公室內買東西,只要標識出用戶在某個樓里面就可以了。所以,不同的業務場景,我們需要進行不同的設置。

3.通過上面的三重判斷,終于獲取了我所需要的位置信息,這時停止定位,懸崖勒馬,再也不用擔心用戶說“你的app怎么這么費電了”。

代碼奉上(這段代碼也適用于定位按鈕的功能,點擊一次定位按鈕進行一次定位)

#import <ViewController.h>
#import <MAMapKit/MAMapKit.h>

@interface ViewController ()<MAMapViewDelegate>
{
  MAMapView *_mapView;
}
@end

- (void)viewDidLoad
{
  [super viewDidLoad];

  //配置用戶Key
  [MAMapServices sharedServices].apiKey = @"用戶Key";

  _mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
  _mapView.delegate = self;

  //開啟定位
  _mapView.showsUserLocation = YES; //開啟定位
}

?

-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
updatingLocation:(BOOL)updatingLocation
{
  if(updatingLocation)
  {
    //取出當前位置的坐標

    CLLocation *newLocation = userLocation.location;

? ? ? ? ? ?//判斷時間
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];

    if (locationAge > 5.0) {
      return;
    }

? ? ? ? ? ?

? ? ? ? ? //判斷水平精度是否有效

    if (newLocation.horizontalAccuracy < 0) {
      return;
    }

?

? ? ? ? ?//根據業務需求,進行水平精度判斷,獲取所需位置信息(100可改為業務所需值)

   ?if(newLocation.horizontalAccuracy < 100){

      //獲取定位位置的經緯度

      CLLocationCoordinate2D myCoordinate = [newLocation coordinate];
      // 緯度
      CGFloat latitude = myCoordinate.latitude;
      // 經度
      CGFloat longitude = myCoordinate.longitude;

? ? ? ? ? ? ? ? ?// 做所需的功能

      ……

      

? ? ? ? ? ? ? ? ?//停止定位

      _mapView.showsUserLocation = NO;

? ? ? ? ? }
  }

}

?

注意:_mapView.showsUserLocation = NO停止定位后,定位小藍點也同時從mapview上消失,如果想看到你的定位點,用獲取的坐標加個annotation即可,加annotation的方法請看這里:http://lbs.amap.com/api/ios-sdk/guide/overlay/#annotation。

?

轉載于:https://www.cnblogs.com/jessiemap/p/4381715.html

總結

以上是生活随笔為你收集整理的iOS一次定位解决方案(基于高德iOS SDK)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。