iOS获取用户位置(续)
2013-07-03 09:26
281 查看
前面尝试了mapkit+google,百度地图api 2种方式实现用户定位,最后一种使用的是CLLocation获取火星坐标让后修正的方案,因为修正是本地,这是目前最适合我们应用的方式之一。这种做法的优势是只要定位打开并允许应用获取你的位置,就能及时获取你的经纬度(google坐标),代码如下:
locManager = [[CLLocationManager alloc] init]; locManager.delegate = self; [locManager startUpdatingLocation]; #pragma mark 获取位置,这里得到的是火星坐标 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { if (locations.count == 0) { return; } CLLocation *oneLocation = [locations objectAtIndex:0]; } //火星坐标纠正算法 - (CLLocationCoordinate2D)transformWglat:(double) wgLat andWglon:(double)wgLon { double mgLat; double mgLon; if ([self outOfChinaWithLat:wgLat andLng:wgLon]) { mgLat = wgLat; mgLon = wgLon; CLLocationCoordinate2D coor2d = CLLocationCoordinate2DMake(mgLat, mgLon); return coor2d; } double dLat = [self transformLatx:wgLon - 105.0 andLaty:wgLat - 35.0]; double dLon = [self transformLngx:wgLon - 105.0 andLngy:wgLat - 35.0]; double radLat = wgLat / 180.0 * pi; double magic = sin(radLat); magic = 1 - ee * magic * magic; double sqrtMagic = sqrt(magic); dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi); mgLat = wgLat + dLat; mgLon = wgLon + dLon; CLLocationCoordinate2D coor2d = CLLocationCoordinate2DMake(mgLat, mgLon); return coor2d; } - (BOOL)outOfChinaWithLat:(double)lat andLng:(double)lon { if (lon < 72.004 || lon > 137.8347) return YES; if (lat < 0.8293 || lat > 55.8271) return YES; return NO; } -(double)transformLatx:(double)_x andLaty:(double)_y { double ret = -100.0 + 2*_x + 3.0 * _y + 0.2 * _y * _y + 0.1 * _x * _y + 0.2 * sqrt(fabs(_x)); ret += (20.0 * sin(6.0 * _x * pi) + 20.0 * sin(2.0 * _x * pi)) * 2.0 / 3.0; ret += (20.0 * sin(_y * pi) + 40.0 * sin(_y / 3.0 * pi)) * 2.0 / 3.0; ret += (160.0 * sin(_y / 12.0 * pi) + 320 * sin(_y * pi / 30.0)) * 2.0 / 3.0; return ret; } - (double)transformLngx:(double)_x andLngy:(double)_y { double ret = 300.0 + _x + 2.0 * _y + 0.1 * _x * _x + 0.1 * _x * _y + 0.1 *sqrt(fabs(_x)); ret += (20.0 * sin(6.0 * _x * pi) + 20.0 * sin(2.0 * _x * pi)) * 2.0 / 3.0; ret += (20.0 * sin(_x * pi) + 40.0 * sin(_x / 3.0 * pi)) * 2.0 / 3.0; ret += (150.0 * sin(_x / 12.0 * pi) + 300.0 * sin(_x / 30.0 * pi)) * 2.0 / 3.0; return ret; }
相关文章推荐
- ios 9.0获取用户位置
- iOS获取到用户当前位置
- iOS获取用户位置
- iOS下获取用户当前位置的信息
- iOS中获取用户所点击的位置信息,并通过这个位置信息得到tableView的中的cell的indexPath.section
- iOS开发笔记(使用Google Map Service获取用户当前位置信息)
- ios获取用户账号信息的文件位置-ios5 ios6才有
- iOS 激活APP时通知APP开始获取用户位置
- iOS开发获取用户位置及定位
- iOS 获取用户位置信息的 预处理
- iOS应用被杀死后继续获取用户地理位置
- ios 获取用户的位置
- 地图篇-01.获取用户位置
- 【百度地图API·javascriptapi】地图定位、创建自定义图标、获取用户点击位置
- iOS-81-百度地图-通过经纬度获取到具体位置
- 获取当前用户的网络状态--iOS
- 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)
- iOS开发---通过坐标位置获取对应的UITableViewCell
- IOS模拟器能获取运营商信息,网络连接类型以及地理位置吗?
- iOS获取当前位置经纬度