`
ming_fanglin
  • 浏览: 223487 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iPhone Locate 定位技术

阅读更多
其实使用iphone的定位系统开发软件是很简单的一件事,下面我们就来认识一下iphone的定位系统的使用。
1.Getting the User’s Current Location
获取用户当前位置。
获取位置的方式有三种:GPS, cell tower triangulation(蜂窝站点), 和
Wi-Fi Positioning Service (WPS).其中GPS是最精确的定位方式,但是在第一代iphone上没有。GPS是通过读取很多卫星微波信号来确定当前位置的。蜂窝站点通过 iphone周围的站点计算出来的,在蜂窝站点密集的地方使用这种技术可以达到一个准确的值,比如在城市但在蜂窝站点不密集的地方效果就没那么好了。最后一个WPS使用的是连接到Wi-Fi网络的IP地址来确定位置,这将会有较大的误差。这三种方式都会消耗大量的电。怎么才能即实现定位功能又省电呢?下面的方法就可以解决:当使用Core Location时,可以选择精确度,谨慎的选择你所需要的准确度,可以帮助你省很多电。Core Location使用的技术隐藏在应用程序中。我们无需选择使用GPS、蜂窝站点技术还是WPS,我们只要告诉它我们需要的准确度它会自己决定选什么技术来满足我们的需求。
2.The Location Manager
Core Location的接口是很容易使用的。主要用到的类是CLLocationManager,就是通常说的Location Manager。为了使用Core Location我们需要创建Location Manager的实体:
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
这样我们就创建了 Location Manager的实体,但是我们还没有开始定位。我们需要指派一个代理给Location Manager。当定位信息改变时Location Manager将调用代理方法。定位的过程会花一段时间平均几秒钟。代理方法必须遵循CLLocationManagerDelegate协议。
3.Setting the Desired Accuracy
设置代理后,你还要设置需要的准确度。就像我们刚刚说的精确度越高越耗电。如果你只是要是应用程序确定是哪个国家或是哪个州那么就不要设置很高的精确度。记住一点有时候你并不能得到你需要的精确度。
下面说一个设置代理和设置精确度的例子:
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
精确度使用的是一个double类型的常量。单位是米,所以如果你设置desiredAccuracy=10那么精确度就是10米,这就告诉 Location Manager尽可能达到10米的精确度。还可以设置为其他常量:kCLLocationAccuracyBest,
you can also use kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracy
HundredMeters, kCLLocationAccuracyKilometer, and kCLLocationAccuracyThree
Kilometers.
4.Setting the Distance Filter
默认情况是这样的,每当位置改变时Location Manager就调用一次代理。通过设置distance filter可以实现当位置改变超出一定范围时Location Manager才调用相应的代理方法。这样可以达到省电的目的。
例如:locationManager.distanceFilter = 1000.0f;
如果设置默认值:
locationManager.distanceFilter = kCLDistanceFilterNone;
5.Starting the Location Manager
开始定位
当你转备好为定位消耗电池时我们可以调用
[locationManager startUpdatingLocation];
来告诉 Location Manager开始定位
6.Using the Location Manager Wisely
如果你只需要确定当前位置而不需要进一步定位,当Location Manager查询到当前位置时需要通知代理停止定位。
停止方法: [locationManager stopUpdatingLocation];
7.The Location Manager Delegate
Location Manager必须遵守CLLocationManagerDelegate协议,CLLocationManagerDelegate协议定义了两个方法,并且这两个方法都是可选的。其中一个方法是当确定当前位置或是位置信息改变时调用。另一个方法是当遇到错误信息时调用
8.Getting Location Updates
当Location Manager想通知它的代理当前位置时,它会调用
locationManager:didUpdateToLocation:fromLocation: 方法。
这个方法有3个参数第一个参数Location Manager。第二个参数是一个CLLocation对象用来确定当前位置,第三个是CLLocation 对象用来确定最近一次更新是的位置。该方法调用时,先前的location对象会被置空。
6.Getting Latitude and Longitude Using CLLocation
经纬度
位置信息是通过使用CLLocation类的实例从Location Manager那里得到的。这个类有5各属性。latitude和longitude被封装在coordinate属性中。
获取方式如下:
CLLocationDegrees latitude = theLocation.coordinate.latitude;
CLLocationDegrees longitude = theLocation.coordinate.longitude;
CLLocation对象还可以告诉你精确度。
horizontalAccuracy属性描述调整的中心点。horizontalAccuracy值越大越不精确。
CLLocation 还有一个叫altitude的属性用来表示海拔
CLLocationDistance altitude = theLocation.altitude;
每一个CLLocation对象都有一个叫verticalAccuracy的属性来判断精确度。海拔数值可能会有verticalAccuracy大小的误差,当verticalAccuracy为负值时,那是Core Location在通知你不能获取海拔高度。
CLLocation的另一个属性timestamp用来告诉Location Manager是什么时候定位的。CLLocation还有一个实例方法来告诉你的两个CLLocation对象之间的距离。这个方法叫:getDistanceFrom:
它是这样工作的:
CLLocationDistance distance = [fromLocation getDistanceFrom:toLocation];
返回两个时间段内的距离,有时候它是不考虑海拔的,所以要自己计算距离。
7.Error Notifications
如果Core Location不能指定你当前的位置,它将调用。CLLocation的第二个代理方法:locationManager:didFailWithError:,最常见的是用户取消使用定位信息。
2
1
分享到:
评论

相关推荐

    iPhone Locate 定位相关

    本文主要探讨的是关于“iPhone Locate 定位相关”的知识,这通常涉及到iOS平台上的位置服务和地理编码(Geocoding)及逆地理编码(Reverse Geocoding)技术。 首先,我们需要了解iOS中的位置服务。在iPhone上,位置...

    Locate32汉化绿色版

    Locate32的核心在于其采用的数据库技术。它会预先扫描用户指定的硬盘、目录或其他存储介质上的所有文件,将这些文件的信息,如文件名、大小、创建日期、修改日期等关键数据,存入数据库。这样,在后续的搜索过程中,...

    locate_3.11.7100_汉化

    在原始的`locate`命令中,它基于一个预先构建的文件系统数据库来快速定位文件,相比`find`命令,其优势在于搜索速度极快。`locate_3.11.7100_汉化`在此基础上进行了优化和本地化处理,不仅保留了快速搜索的功能,还...

    linux中locate命令使用介绍.docx

    Linux 中 locate 命令使用介绍 Linux 中 locate 命令是一种快速搜索文件系统的命令,通过建立一个包括系统内所有文件名称及路径的数据库,之后当搜索时就只需查询这个数据库,而不必实际深入文件系统之中了。在一般...

    locate32_3.1.11.8220a_fix.zip

    1. **高速搜索**:Locate32的搜索速度极快,几乎在瞬间就能返回结果,这得益于其高效的数据库索引技术。 2. **丰富的查询选项**:除了基本的文件名搜索外,用户还可以通过文件大小、修改日期、文件类型等多种条件...

    HA_Locate32_v3189210.rar

    Locate32,这款小巧而强大的文件定位工具,凭借其高效快速的搜索性能,在IT行业中赢得了众多用户的青睐。标题中的"HA_Locate32_v3189210.rar"指的是Locate32的特定版本——v3.1.8.9210汉化版,它不仅保留了原版的...

    Locate32,window文件搜索神器

    这使得在海量文件中定位特定文件变得轻而易举,极大地提高了工作效率。 对于那些经常需要处理大量文件,或者需要频繁查找特定文件的用户来说,Locate32无疑是一个不可或缺的工具。它不仅可以帮助你快速找到需要的...

    Locate32极品磁盘文件搜索工具(中文)

    Locate32是一款高效强大的文件搜索工具,专为Windows用户设计,旨在帮助用户快速、准确地定位计算机中的文件。这款软件以其简洁的界面和出色的性能赢得了用户的青睐,尤其适合那些需要频繁查找特定文件的用户。 ...

    SAT Locate_satellite_

    标题“SAT Locate_satellite_”和描述“Locate satellite Satellite Satellite”显然与卫星定位技术相关,特别是可能涉及一种名为“SAT Locate”的系统或服务。标签“satellite”进一步强化了这个主题,暗示我们讨论...

    Locate32(文件查找)绿色汉化版 V3.1 build 8.09210

    它通过建立一个数据库来索引计算机上的文件和文件夹,这个数据库包含了文件名、大小、修改日期等重要信息,使得用户可以快速定位到需要的文件。与传统的逐个文件扫描不同,Locate32的预索引方式极大地提高了搜索速度...

    解决Can’t locate ExtUtils/MakeMaker.pm in @INC报错

    Can’t locate ExtUtils/MakeMaker.pm in @INC (@INC contains: inc /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5

    解决Can't locate ThreadQueue.pm

    标题 "解决Can't locate ThreadQueue.pm" 指出的问题是,在尝试运行一个Perl脚本时,系统无法找到模块“ThreadQueue”。这个问题通常出现在你试图使用一个依赖于ThreadQueue模块的Perl程序,但该模块尚未在你的Perl...

    group_concatenate与locate的联合用法示例

    在SQL查询中,`GROUP_CONCAT` 和 `LOCATE` 是两个非常实用的函数,它们分别用于处理分组数据的聚合和字符串定位。本篇文章将详细介绍这两个函数的用途以及它们如何联合使用,以帮助你更好地理解和应用在实际的数据库...

    打开vivado的.xpr工程文件报错Cannot locate target loade

    ### 打开Vivado的.xpr工程文件报错Cannot Locate Target Loader的解决方案 #### 问题背景 在使用Xilinx Vivado设计工具进行FPGA/CPLD开发时,经常会遇到各种各样的问题,其中之一就是在尝试打开一个`.xpr`工程文件...

    which,whereis,locate,find的用法与区别

    - `2>/dev/null` 是一个常用的技术,用于忽略错误输出,从而避免因权限不足导致的输出干扰。 - `find /etc -name "httpd.conf"` 仅在 `/etc` 目录及其子目录中查找名为 `httpd.conf` 的文件。 - `find / -type f -...

    文件索引工具Locate 32

    在局域网环境中,Locate 32可以帮助用户快速定位网络上的共享文件,这对于团队协作和文件共享非常有用。只需确保所有电脑都正确配置并允许网络访问,就能实现跨机器的快速搜索。 总的来说,Locate 32是一款强大的...

    文件查找工具locate32

    《 Locate32:高效文件搜索利器详解》 在日常计算机操作中,我们常常需要快速查找某个文件或文件夹,尤其在处理大量数据时,传统的Windows资源管理器搜索可能显得力不从心。这时,专业的文件查找工具就显得尤为重要...

    keil c51中变量 常量 函数的定位

    可以使用 BL51 Locate 选项或伪指令 CSEG 将子程序段定位到某个特定的存储器地址上。 2. 怎样在 EEPROM 中固定的位置存放一个字符串?可以使用_at_关键字或 BL51 Locate 选项将字符串定位到某个特定的存储器地址上。

    解决Could not locate executable null\bin\winutils.exe

    在windows环境下的eclipse或者idea中编写spark应用时,有时为了验证程序功能需要以本地模式运行...java.io.Exception: Could not locate executable null\bin\winutils.exe in the Hadoop binarie 本文件可以解决此异常

    试设计一个实现下述要求的Locate运算的函数

    试设计一个实现下述要求的Locate运算的函数。设有一个带头结点的双向链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freg。所有结点的freg初始都为0...

Global site tag (gtag.js) - Google Analytics