地圖定位

//ViewController.m

import "ViewController.h"

import <MapKit/MapKit.h>

import <CoreLocation/CoreLocation.h>

@interface ViewController ()<CLLocationManagerDelegate,MKMapViewDelegate>
{
//定義變量地圖視圖、定位管理對象、地圖解析對象
MKMapView *mv;
CLLocationManager *manager;
CLGeocoder *geo;
}
@end

@implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    //初始化地圖視圖
    mv = [[MKMapView alloc]initWithFrame:self.view.bounds];
    mv.mapType = MKMapTypeStandard;
    mv.zoomEnabled = YES;
    mv.rotateEnabled = YES;
    mv.scrollEnabled = YES;
    mv.showsUserLocation = YES;
    [self.view addSubview:mv];
    //定位
    CLLocationCoordinate2D center = {34,101};
    MKCoordinateSpan span = {0.01,0.01};
    MKCoordinateRegion region = {center,span};
    [mv setRegion:region animated:YES];
    //初始化定位管理器
    manager = [[CLLocationManager alloc]init];
    [manager requestWhenInUseAuthorization];
    manager.delegate = self;
    manager.desiredAccuracy = kCLLocationAccuracyBest;
    manager.distanceFilter = kCLDistanceFilterNone;
    [manager startUpdatingLocation];
    //初始化地址解析對象
    geo = [[CLGeocoder alloc]init];
    }

//定位更新響應(yīng)方法

  • (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
    {
    //獲取當前位置
    CLLocation *loc = [locations lastObject];
    //定位
    CLLocationCoordinate2D center = {loc.coordinate.latitude,loc.coordinate.longitude};
    MKCoordinateSpan span = {0.01,0.01};
    MKCoordinateRegion region = {center,span};
    [mv setRegion:region animated:YES];
    NSMutableString *mSt = [NSMutableString string];
    //反向解析經(jīng)緯度獲取地址
    [geo reverseGeocodeLocation:loc completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
    CLPlacemark *pla = [placemarks firstObject];

      NSArray *arr = [pla.addressDictionary objectForKey:@"FormattedAddressLines"];
      //拼接地址
      for (NSString *str in arr) {
          [mSt appendString:str];
      }
      //添加錨點
      MKPointAnnotation *anno = [[MKPointAnnotation alloc]init];
      anno.coordinate = center;
      anno.title = @"我的位置";
      anno.subtitle = mSt;
      [mv addAnnotation:anno];
    

    }];
    }

  • (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
    {
    CLLocationCoordinate2D loc = [userLocation coordinate];
    //放大地圖到自身的經(jīng)緯度位置。
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 250, 250);
    [mv setRegion:region animated:YES];
    }

  • (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
    {
    static NSString *cellid = @"cellid";
    MKAnnotationView *anno = [mapView dequeueReusableAnnotationViewWithIdentifier:cellid];
    if (!anno) {
    anno = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:cellid];
    }
    anno.canShowCallout = YES;
    return anno;
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • #import #import<CoreLocation/CoreLocation.h> { //定義變量地圖視圖...
    法庫德閱讀 243評論 0 0
  • 最近在做項目中,需要用到最新版的百度地圖,這里是個小的Demo,希望能夠有用到的。 效果圖:先貼上。 一、直接到百...
    A迷城閱讀 3,477評論 1 4
  • 記得加入庫MapKit #import #import <CoreLocation/CoreLocation.h>...
    leaderleader閱讀 1,117評論 1 0
  • //聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄 /**注意點: 1.看 GIF 效果圖.2.看連線...
    石虎132閱讀 607評論 0 9
  • 漆黑一片,好像有人追逐著自己,又好像沒有,使勁的朝著一個方向跑,希望可以找到一點光亮。終于看見光了,繼續(xù)發(fā)狂的奔跑...
    絲絨小貓閱讀 553評論 3 3

友情鏈接更多精彩內(nèi)容