定位和地图

一、概述

  现在很多社交、电商、团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的。的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式。例如你到了一个陌生的地方想要查找附近的酒店、超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品。总之,目前地图和定位功能已经大量引入到应用开发中。今天就和大家一起看一下iOS如何进行地图和定位开发。

二、定位

  要实现地图、导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作。Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。在Core Location中主要包含了定位、地理编码(包括反编码)功能。

  定位是一个很常用的功能,如一些地图软件打开之后如果用户允许软件定位的话,那么打开软件后就会自动锁定到当前位置,如果用户手机移动那么当前位置也会跟随着变化。要实现这个功能需要使用Core Location中CLLocationManager类。

  iOS 8 还提供了更加人性化的定位服务选项。App 的定位服务不再仅仅是关闭或打开,现在,定位服务的启用提供了三个选项,「永不」「使用应用程序期间」和「始终」。同时,考虑到能耗问题,如果一款 App 要求始终能在后台开启定位服务,iOS 8 不仅会在首次打开 App 时主动向你询问,还会在日常使用中弹窗提醒你该 App 一直在后台使用定位服务,并询问你是否继续允许。

  在iOS7及以前的版本,如果在应用程序中使用定位服务只要在程序中调用startUpdatingLocation方法应用就会询问用户是否允许此应用是否允许使用定位服务,同时在提示过程中可以通过在info.plist中配置通过配置Privacy - Location Usage Description告诉用户使用的目的,同时这个配置是可选的。

  但是在iOS8中配置配置项发生了变化,可以通过配置NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。

  注意:在使用CLLocationManager之前需要引入Core Location.frame框架,然后#import <CoreLocation/CoreLocation.h>

  CLLocationManager

    1.类方法

      a)+ (BOOL)locationServicesEnabled

      //是否启用定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务

      b)+ (CLAuthorizationStatus)authorizationStatus

       //定位服务授权状态,返回枚举类型:

      kCLAuthorizationStatusNotDetermined: 用户尚未做出决定是否启用定位服务

      kCLAuthorizationStatusRestricted: 没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权

      kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态

      kCLAuthorizationStatusAuthorizedAlways: 应用获得授权可以一直使用定位服务,即使应用不在使用状态

      kCLAuthorizationStatusAuthorizedWhenInUse: 使用此应用过程中允许访问定位服务

    2.实例属性

      a)desiredAccuracy

      //定位精度,枚举类型:

      kCLLocationAccuracyBest:最精确定位
      CLLocationAccuracy kCLLocationAccuracyNearestTenMeters:十米误差范围
      kCLLocationAccuracyHundredMeters:百米误差范围
      kCLLocationAccuracyKilometer:千米误差范围
      kCLLocationAccuracyThreeKilometers:三千米误差范围

      b)distanceFilter  

      //位置信息更新最小距离,只有移动大于这个距离才更新位置信息,默认为kCLDistanceFilterNone:不进行距离限制  

    3.实例方法

      a)startUpdatingLocation

      //开始定位追踪,开始定位后将按照用户设置的更新频率执行-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;方法反馈定位信息

      b)stopUpdatingLocation

      //停止定位追踪

      c)startUpdatingHeading

      //开始导航方向追踪

      d)stopUpdatingHeading

      //停止导航方向追踪

      e)startMonitoringForRegion:

      //开始对某个区域进行定位追踪,开始对某个区域进行定位后。如果用户进入或者走出某个区域会调用- (void)locationManager:(CLLocationManager *)manager
    didEnterRegion:(CLRegion *)region
- (void)locationManager:(CLLocationManager *)manager
    didExitRegion:(CLRegion *)region
代理方法反馈相关信息

      f)stopMonitoringForRegion:

      //停止对某个区域进行定位追踪

      e)requestWhenInUseAuthorization

      //请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置NSLocationWhenInUseUsageDescription

      g)requestAlwaysAuthorization

      //请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置NSLocationAlwaysUsageDescription

    4.代理方法  

      a)-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

      //位置发生改变后执行(第一次定位到某个位置之后也会执行)

      c)- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

      //导航方向发生变化后执行

      e)  - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

      //进入某个区域之后执行

      f) (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region

      //走出某个区域之后执行

//
//  KCMainViewController.m
//  CoreLocation
//
//  Created by Kenshin Cui on 14-03-27.
//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#import "KCMainViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface KCMainViewController ()<CLLocationManagerDelegate>{

    CLLocationManager *_locationManager;
}

@end

@implementation KCMainViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //定位管理器
    _locationManager=[[CLLocationManager alloc]init];

    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位服务当前可能尚未打开,请设置打开!");
        return;
    }

    //如果没有授权则请求用户授权
    if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined){
        [_locationManager requestWhenInUseAuthorization];
    }else if([CLLocationManager authorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse){
        //设置代理
        _locationManager.delegate=self;
        //设置定位精度
        _locationManager.desiredAccuracy=kCLLocationAccuracyBest;
        //定位频率,每隔多少米定位一次
        CLLocationDistance distance=10.0;//十米定位一次
        _locationManager.distanceFilter=distance;
        //启动跟踪定位
        [_locationManager startUpdatingLocation];
    }
}

#pragma mark - CoreLocation 代理
#pragma mark 跟踪定位代理方法,每次位置发生变化即会执行(只要定位到相应位置)
//可以通过模拟器设置一个虚拟位置,否则在模拟器中无法调用此方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    CLLocation *location=[locations firstObject];//取出第一个位置
    CLLocationCoordinate2D coordinate=location.coordinate;//位置坐标
    NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
    //如果不需要实时定位,使用完即使关闭定位服务
    [_locationManager stopUpdatingLocation];
}

@end

 

时间: 2024-10-09 20:59:17

定位和地图的相关文章

Android 开发之集成百度地图的定位与地图展示

app 应用中,大多数应用都具有定位功能,百度定位就成了开发人员的集成定位功能的首选,最近也在做定位功能,但是发现百度真是个大坑啊, sdk 命名更新了,相关代码却不更新,害得我花费了很长时间来研究,今天来给大家分享下 Android 集成百度地图要注意的事情,这里只是集成了定位和地图展示功能,其他功能还未涉及,先看下效果图: 接下来介绍一下 Android 集成百度地图的步骤: 首先登陆百度开发平台,在我的应用中创建应用,然后你会看到如下界面: 根据它的要求填写相关信息,这里的安全是有 SHA

iOS8定位与地图

iOS开发系列--地图与定位 转载:http://www.cnblogs.com/kenshincui/ 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看

ios之定位与地图

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒 店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开 发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要 实现地图.导航功能,往往需要先熟悉定位功能

UI高级___定位,地图

学习目标: —定位功能 —地理编码 —用户位置跟中 —大头针 在IOS开发中,要加入定位和地图  必须导入2个框架进行开发. map kit:用于地图展示 core Location:用于地理定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位 操作.Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的, 但是往往地图开发要配合定位框架使用.在Core Location中主要包含了定位.地理编码(包括反编码)功能.

移动机器人定位与地图创建(SLAM)方法

自主移动机器人同时定位与地图创建(SLAM)方法 1.引言: 机器人的研究越来越多的得到关注和投入,随着计算机技术和人工智能的发展,智能自主移动机器人成为机器人领域的一个重要研究方向和研究热点.移动机器人的定位和地图创建是自主移动机器人领域的热点研究问题.对于已知环境中的机器人自主定位和已知机器人位置的地图创建已经有了一些实用的解决方法.然而在很多环境中机器人不能利用全局定位系统进行定位,而且事先获取机器人工作环境的地图很困难,甚至是不可能的.这时机器人需要在自身位置不确定的条件下,在完全未知环

android定位和地图开发实例

在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便. 首先介绍一下地图包中的主要类: MapController : 主要控制地图移动,伸缩,以某个GPS坐标为中心,控制MapView中的view组件,管理Overlay,提供View的基本功能.使用多种地图模式(地图模式(某些城市可实时对交通状况进行更新),卫星模式,街景模式)来查看Google Map.常用方法:animateTo(GeoPoint point) setCenter(GeoPoint

iOS定位与地图

定位: 手机上定位的实现主要有三种方式:基站(附近基站的位置),wifi(所连接路由器的位置),卫星(最准确,也最耗能). iOS的定位功能主要是由CLLocationManager类来完成的.这个类属于CoreLocation类库,所以使用定位功能之前,现在头文件中导入该类库. 定位的步骤: 1. 通过类方法判断定位服务是否开启,若为NO,则先要提醒用户在手机上设置开启定位服务: + (BOOL)locationServicesEnabled 2. 通过类方法判断授权状态(iOS8之后).授权

地图与定位之地图、大头针

添加框架CoreLocation.MapKit框架 一.首先了解大头针 要添加大头针需实现协议MKAnnotation ,由下图可以看到,一定要实现coordinate属性. 二.实现大头针协议 添加MyAnnotation类 #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> //MKAnnotation是一个协议 ,添加大头针久需要实现该协议 //coordinate 属性是必须的,所以需要实现该属性 @int

Html5——地理定位及地图

常用的navigator.geolocation对象有以下三种方法: 获取当前地理位置:navigator.geolocation.getCurrentPosition(success_callback_function, error_callback_function, position_options) 持续获取地理位置(时时定位):navigator.geolocation.watchPosition(success_callback_function, error_callback_fu