Staying on Track with Location Services--WWDC 2012 session 303

虽然说现在才学习这些,有点为时已晚,但是,对于提升自己能力来说,还是有很大帮助的。所以就这样吧,坚持下去,就是胜利。

以此为开篇。在iOS中追踪用户的位置轨迹。

 

首先,iOS的定位技术包括以下3种

• Cellular positioning
• Wi-Fi positioning
• Global Navigation Satellite Systems (GNSS)
■ NavStar (GPS) ■ GLONASS

蜂窝定位,Wi-Fi定位,当然还有少不了的全球卫星定位系统(高端吧,一个是GPS,另一个也不知道是什么)!

看看最简单的获取用户当前位置信息的流程

 

- (void)setupLocation
{
    self.manager=[CLLocationManagernew];
    self.manager.delegate=self;
    self.manager.desiredAccuracy=kCLLocationAccuracyBestForNavigation; 
}

- (void)startLocation
{
    [self.managerstartUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation {
    self.mapView.userPosition=newLocation; 
}

 

 

 

  • 另外一个功能:

经纬度与地址之间可以相互编码,例如:

800 Howard St. San Francisco, CA <-----> 37.78338, -122.403354 

 

  • 监测设备是否进入某个特定区域
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(37.332426, -122.030404);
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coord radius:100.0 identifier:@”Apple Inc.”];

再调用startMonitoringForRegion:(CLRegion *)region,并设置好CLLocationManagerDelegate即可

在locationManager:didEnterRegion:和locationManager:didExitRegion:这两个回调方法即可实现监测功能。

 

iOS6开始,定位需要用户授权这是大家都很熟悉了,就不再详述了。

 

  • 一些苹果给的建议(原话是:Tips, Tricks, and Myths) 

1.使用地图可以更快地加载位置(获取用户位置)

2.关闭Wi-Fi以提高精准度

 

如何让程序在后台运行?这个可能可以展开一个篇幅来讲

<key>UIBackgroundModes</key>
<array>
  <string>location</string>
</array>
<key>Required background modes</key>
<array>
  <string>Appregistersforlocationupdates</string>
</array>

 

 

最后总结是,尽可能为用户省电,当获取完一次用户位置,判断精准度,然后就该停止update用户的位置,下次需要新位置的时候再startupdating。

 

 

posted @ 2014-05-12 11:20  卓毅  阅读(294)  评论(0编辑  收藏  举报