1.对iOS定位功能的初步了解:
现在的移动设备很多都提供定位服务,使用iOS系统的iPhone、iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星
iOS 不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位。iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用 哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案。这个方案是这样的,如果能够接收GPS信息,那么设备优先采用 GPS定位,否则采用Wifi或蜂窝基站定位,在Wifi和蜂窝基站之间优先使用Wifi,如果无法连接Wifi才使用蜂窝基站定位。
总体来说GPS定位优点是准确、覆盖面广阔,缺点是不能被遮挡(例如:在建筑物里面收不到GPS卫星信号)、GPS开启后比较费电。蜂窝基站不仅误差比较大,而且会耗费用户流量费。而Wifi定位是最经济实惠的。
2.CLLocationManager定位使用的类;CLLocationManager *manager = [[CLLocationManager alloc]init];
iOS8使用定位需在pilst里面添加NSLocationWhenInUseUsageDescriptio NSLocationAlwaysUsageDescription获取用户的授权。
使用定位启动时要与InfoPlist里面设置的Key一致,例:[manager requestWhenInUseAuthorization];
让系统自动帮助管理定位服务的开关,从而节约电量;[manager pausesLocationUpdatesAtuomatically];
3.CLLocationManagerDelegate方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
(NSArray *)locations 这个数组里面有设备的当前定位的具体位置信息,可以通过[location lastObject]获取最新的地理位置。
可以根据获取的地理位置信息通过反地理编码获得具体位置的地名:
CLGeocoder *reGeocoder = [[CLGeocoder alloc]init];
[reGeocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *mark = [placemarks lastObject];
addressLabel.text = mark.locality;城市名
}
{