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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

部分LBS應(yīng)用,在打開(kāi)app時(shí)獲取當(dāng)前的準(zhǔn)確位置就能滿足要求,一直開(kāi)著定位,不僅會(huì)浪費(fèi)流量也費(fèi)電,所以這里給大家推薦一個(gè)一次定位的解決方法。

步驟如下:

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

2.在定位回調(diào)中對(duì)返回的位置信息做一些處理,保證位置信息的準(zhǔn)確性。

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

? ?b)iOS的定位是越定越準(zhǔn)的(即:進(jìn)回調(diào)的次數(shù)越多,定位的精確度越高),所以要判斷位置的水平精度是否有效。

? ?c)不同的業(yè)務(wù)場(chǎng)景,對(duì)定位的精準(zhǔn)度要求不一樣,比如:在室外叫出租車(chē),希望司機(jī)能準(zhǔn)備的看到我的位置,這時(shí)候需要與當(dāng)前位置偏差越小越好;在辦公室內(nèi)買(mǎi)東西,只要標(biāo)識(shí)出用戶(hù)在某個(gè)樓里面就可以了。所以,不同的業(yè)務(wù)場(chǎng)景,我們需要進(jìn)行不同的設(shè)置。

3.通過(guò)上面的三重判斷,終于獲取了我所需要的位置信息,這時(shí)停止定位,懸崖勒馬,再也不用擔(dān)心用戶(hù)說(shuō)“你的app怎么這么費(fèi)電了”。

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

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

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

- (void)viewDidLoad
{
  [super viewDidLoad];

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

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

  //開(kāi)啟定位
  _mapView.showsUserLocation = YES; //開(kāi)啟定位
}

?

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

    CLLocation *newLocation = userLocation.location;

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

    if (locationAge > 5.0) {
      return;
    }

? ? ? ? ? ?

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

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

?

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

   ?if(newLocation.horizontalAccuracy < 100){

      //獲取定位位置的經(jīng)緯度

      CLLocationCoordinate2D myCoordinate = [newLocation coordinate];
      // 緯度
      CGFloat latitude = myCoordinate.latitude;
      // 經(jīng)度
      CGFloat longitude = myCoordinate.longitude;

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

      ……

      

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

      _mapView.showsUserLocation = NO;

? ? ? ? ? }
  }

}

?

注意:_mapView.showsUserLocation = NO停止定位后,定位小藍(lán)點(diǎn)也同時(shí)從mapview上消失,如果想看到你的定位點(diǎn),用獲取的坐標(biāo)加個(gè)annotation即可,加annotation的方法請(qǐng)看這里:http://lbs.amap.com/api/ios-sdk/guide/overlay/#annotation。

?

轉(zhuǎn)載于:https://www.cnblogs.com/jessiemap/p/4381715.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。