1.实现定位功能需要导入系统库MapKit.framework

2.在iPhone手机上默认是禁止手机定位的,所以,要询问系统是否开启手机定位功能。

为了开启手机定位功能,还需在info.plist中添加开启定位描述。如图,

3.功能代码如下:

//
// ViewController.m
// MapLocationDemo
//
// Created by apple on 15/12/3.
// Copyright © 2015年 hoondraw. All rights reserved.
// #import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
#import "MapViewController.h" @interface ViewController () <CLLocationManagerDelegate> /** 定位管理类*/
@property (strong, nonatomic) CLLocationManager *mgr; /** 地理编码对象*/
@property (strong, nonatomic) CLGeocoder *geocoder; @property (weak, nonatomic) IBOutlet UILabel *latLabel; @property (weak, nonatomic) IBOutlet UILabel *longLabel; @property (weak, nonatomic) IBOutlet UILabel *geocoderLabel; /** 当前定位信息*/
@property (strong, nonatomic) CLLocation *currentLocation; @end @implementation ViewController - (CLLocationManager *)mgr {
if (!_mgr) {
_mgr = [[CLLocationManager alloc] init];
}
return _mgr;
} - (CLGeocoder *)geocoder {
if (!_geocoder) {
_geocoder = [CLGeocoder new];
}
return _geocoder;
} - (void)viewDidLoad {
[super viewDidLoad];
self.mgr.delegate = self; if ([[UIDevice currentDevice].systemVersion doubleValue]> 8.0) {
//只在前台定位
[self.mgr requestWhenInUseAuthorization];
} else {
NSLog(@"iOS7");
//直接开始定位
[self.mgr startUpdatingLocation];
}
} #pragma mark - 定位协议方法
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
//定位的设置参数
self.mgr.desiredAccuracy = kCLLocationAccuracyBest;
self.mgr.distanceFilter = kCLHeadingFilterNone;
[self.mgr startUpdatingLocation];
} else {
//不允许定位
} } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *location = [locations lastObject];
self.latLabel.text = [NSString stringWithFormat:@"经度:%lf", location.coordinate.latitude];
self.longLabel.text = [NSString stringWithFormat:@"纬度:%lf", location.coordinate.longitude]; //获取当前的location
self.currentLocation = location; [self.mgr stopUpdatingLocation];
}
/** 地理编码*/
- (IBAction)clickGecoder:(id)sender {
NSString *name = @"广州市天河区天河珠江新城";
//从服务器获取name对应的经纬度(请求)
[self.geocoder geocodeAddressString:name completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (!error) {
//地理编码成功
for (CLPlacemark *placemark in placemarks) {
self.latLabel.text = [NSString stringWithFormat:@"纬度:%lf",placemark.location.coordinate.latitude];
self.longLabel.text = [NSString stringWithFormat:@"经度:%lf",placemark.location.coordinate.longitude];
self.geocoderLabel.text = [NSString stringWithFormat:@"地址信息:%@",placemark.addressDictionary];
}
}
}];
} /** 反地理编码*/
- (IBAction)clickGeoDecoder:(id)sender {
CLLocation *location = [[CLLocation alloc] initWithLatitude:self.currentLocation.coordinate.latitude longitude:self.currentLocation.coordinate.longitude]; [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (!error) {
//反地理编码成功
for (CLPlacemark *placemark in placemarks) {
self.latLabel.text = [NSString stringWithFormat:@"纬度:%lf",placemark.location.coordinate.latitude];
self.longLabel.text = [NSString stringWithFormat:@"经度:%lf",placemark.location.coordinate.longitude];
self.geocoderLabel.text = [NSString stringWithFormat:@"地址信息:%@",placemark.addressDictionary];
}
}
}];
} - (IBAction)gotoMapView:(id)sender {
MapViewController *vc = [[MapViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}

其中,gotoMapView是跳转到地图控制器的方法。

代码如下:

//
// MapViewController.m
// MapLocationDemo
//
// Created by apple on 15/12/3.
// Copyright © 2015年 hoondraw. All rights reserved.
// #import "MapViewController.h"
#import <MapKit/MapKit.h> @interface MapViewController () <MKMapViewDelegate> @property (weak, nonatomic) IBOutlet MKMapView *mapView; @property (strong, nonatomic) CLLocationManager *mgr; @end @implementation MapViewController - (void)viewDidLoad {
[super viewDidLoad]; self.mgr = [[CLLocationManager alloc] init];
[self.mgr requestWhenInUseAuthorization];
//设置和地图相关的属性
self.mapView.delegate = self;
//设置地图的旋转属性
self.mapView.rotateEnabled = YES;
//使用地图视图开始定位
self.mapView.userTrackingMode = MKUserTrackingModeFollow; } #pragma mark - MKMapViewDelegate
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
//地图显示的区域
//设置地图的中心
CLLocationCoordinate2D center = userLocation.location.coordinate;
//设置跨度
MKCoordinateSpan span = MKCoordinateSpanMake(, );
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
[self.mapView setRegion:region animated:YES];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} @end

这样就可以跳转到地图中显示当前地理位置。

iOS定位功能的更多相关文章

  1. iOS 定位功能的实现

    1.导入框架 Xcode中添加"CoreLocation.framework" 2.导入主头文件 #import <CoreLocation/CoreLocation.h&g ...

  2. Flex AIR应用GPS定位功能(Android和IOS)

    说明: 使用AIR进行GPS定位功能实现时,会经常判断GPS是否打开.一般的官方或者书上的介绍的方法,测试后,只能对Android系统进行判断,而对ios系统则无法进行判断. 经过研究测试,终于解决实 ...

  3. iOS 设备定位功能可用的判断

    if ([CLLocationManager locationServicesEnabled] && ([CLLocationManager authorizationStatus] ...

  4. ios 定位

    ios 定位新功能----在程序中实现定位功能 Core Location是iOS SDK中一个提供设备位置的框架.可以使用三种技术来获取位置:GPS.蜂窝或WiFi.在这些技术中,GPS最为精准,如 ...

  5. ionic 添加地图定位功能

    由于项目需求,需要一个定位功能,通过google或百度,搜到一个cordova-plugin-geolocation的插件,在ios上可以用,但是在android就呵呵了,原因就不说了,大家都知道.所 ...

  6. IOS定位服务的应用

    IOS定位服务的应用 一.授权的申请与设置 二.定位服务相关方法 三.定位服务代理的相关方法 四.定位服务获取到的位置对象 五.航标定位得到的航标信息对象 IOS定位服务的应用 一.授权的申请与设置 ...

  7. 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )

    原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...

  8. 对于WIFI版ipad(无GPS芯片)定位功能的释疑

    把玩ipad(WIFI版ipad,无GPS芯片)很久时间了,曾今有很多人(包括我)也用过它的定位功能,发现它确实很准确,通常的误差在40米以内,所以很多人都怀疑这个版本的ipad是不是真的内置了GPS ...

  9. iOS-系统定位功能

    ios系统定位 前期准备 系统定位功能,需要用到框架:CoreLocation/CoreLocation.h, 然后导入文件#import <CoreLocation/CoreLocation. ...

随机推荐

  1. httpClient download file(爬虫)

    package com.opensource.httpclient.bfs; import java.io.DataOutputStream; import java.io.File; import ...

  2. JavaEE Tutorials (22) - 事务

    22.1Java EE应用中的事务35222.2什么是事务35322.3容器托管事务353 22.3.1事务属性354 22.3.2回滚容器托管事务357 22.3.3同步会话bean的实例变量357 ...

  3. python 访问器@property的使用方法

    @property 可以将python定义的函数"当做"属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的 假设定义了一个类Cls,该类必须继承自o ...

  4. jQuery-瀑布流 布局 (处理页面滚动和AJAX加载延迟问题)

    瀑布流:这种布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 一.功能分析: 1.判断图片是否进入可视区域: 2.用AJAX ...

  5. 查找EBS中各种文件版本(Finding File Versions in the Oracle Applications EBusiness Suite - Checking the $HEADER)

    Finding File Versions in the Oracle Applications EBusiness Suite - Checking the $HEADER (文档 ID 85895 ...

  6. JAVA 可视化分析工具 第12节

    JAVA 可视化分析工具  第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...

  7. java -Xms -Xmx -XX:PermSize -XX:MaxPermSize

    java  -Xms -Xmx -XX:PermSize -XX:MaxPermSize     在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError ...

  8. 斐波那契数列 的两种实现方式(Java)

    import java.util.Scanner; /* 斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 如果设F(n)为该数列的第n ...

  9. CEvent,CSemaphore,CCriticalSection,CMutex

    一.用CEvent实现线程同步 事件对象(Event)是最简单的同步对象,它包括有信号和无信号两种状态.在线程访问某一资源之前,也许需要等待某一事件的发生,这时用事件对象最合适.例如,只有在通信端口缓 ...

  10. Javascript基础示例:用JS写简易版贪吃蛇(面向对象)

    废话不多说,代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...