iOS地图上WGS84、GCJ-02、BD-09互转解决方案
来源:互联网 发布:数据库分表策略 编辑:程序博客网 时间:2024/06/05 10:04
这是在网上找的解决方法。。
//// JZLocationConverter.h// Run//// Created by Nick on 15/6/3.// Copyright (c) 2015年 com.zywl.running. All rights reserved.//#import <Foundation/Foundation.h>#import <Foundation/Foundation.h>#import <CoreLocation/CoreLocation.h>@interface JZLocationConverter : NSObject/** * @brief 世界标准地理坐标(WGS-84) 转换成 中国国测局地理坐标(GCJ-02)<火星坐标> * * ####只在中国大陆的范围的坐标有效,以外直接返回世界标准坐标 * * @param location 世界标准地理坐标(WGS-84) * * @return 中国国测局地理坐标(GCJ-02)<火星坐标> */+ (CLLocationCoordinate2D)wgs84ToGcj02:(CLLocationCoordinate2D)location;/** * @brief 中国国测局地理坐标(GCJ-02) 转换成 世界标准地理坐标(WGS-84) * * ####此接口有1-2米左右的误差,需要精确定位情景慎用 * * @param location 中国国测局地理坐标(GCJ-02) * * @return 世界标准地理坐标(WGS-84) */+ (CLLocationCoordinate2D)gcj02ToWgs84:(CLLocationCoordinate2D)location;/** * @brief 世界标准地理坐标(WGS-84) 转换成 百度地理坐标(BD-09) * * @param location 世界标准地理坐标(WGS-84) * * @return 百度地理坐标(BD-09) */+(CLLocationCoordinate2D)wgs84ToBd09:(CLLocationCoordinate2D)location;/** * @brief 中国国测局地理坐标(GCJ-02)<火星坐标> 转换成 百度地理坐标(BD-09) * * @param location 中国国测局地理坐标(GCJ-02)<火星坐标> * * @return 百度地理坐标(BD-09) */+(CLLocationCoordinate2D)gcj02ToBd09:(CLLocationCoordinate2D)location;/** * @brief 百度地理坐标(BD-09) 转换成 中国国测局地理坐标(GCJ-02)<火星坐标> * * @param location 百度地理坐标(BD-09) * * @return 中国国测局地理坐标(GCJ-02)<火星坐标> */+(CLLocationCoordinate2D)bd09ToGcj02:(CLLocationCoordinate2D)location;/** * @brief 百度地理坐标(BD-09) 转换成 世界标准地理坐标(WGS-84) * * ####此接口有1-2米左右的误差,需要精确定位情景慎用 * * @param location 百度地理坐标(BD-09) * * @return 世界标准地理坐标(WGS-84) */+(CLLocationCoordinate2D)bd09ToWgs84:(CLLocationCoordinate2D)location;@end
//// Location.m// Run//// Created by Nick on 15/5/28.// Copyright (c) 2015年 com.zywl.running. All rights reserved.//#import "Location.h"#import "JZLocationConverter.h"static Location * shared = nil;@implementation Location+(id) shareManager{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (shared == nil) { shared = [[super allocWithZone:NULL] init]; } }); return shared;}+(id)allocWithZone:(struct _NSZone *)zone{ return [self shareManager];}-(id)copy{ return self;}-(void)starManager{ self.locationManager = [[CLLocationManager alloc] init];//创建位置管理器 //设置代理 self.locationManager.delegate = self; double version = [[UIDevice currentDevice].systemVersion doubleValue];//判定系统版本。 if(version>=8.0f){ [self.locationManager requestWhenInUseAuthorization];//添加这句 } //设置定位精度 self.locationManager.desiredAccuracy=kCLLocationAccuracyBest; //定位频率,每隔多少米定位一次 CLLocationDistance distance=10.0;//十米定位一次 self.locationManager.distanceFilter=distance; //启动跟踪定位 [self.locationManager startUpdatingLocation]; }///添加运动记录-(NSMutableDictionary *)addHistory{ NSMutableDictionary * par= [[NSMutableDictionary alloc]init]; [par setObject:[self setTime:[NSDate date]] forKey:@"start_time"]; [par setObject:@"0" forKey:@"distance"]; [par setObject:@"0" forKey:@"duration"]; return par;}///更新运动记录-(NSMutableDictionary *)updateHistory{ NSMutableDictionary * par= [[NSMutableDictionary alloc]init]; [par setObject:self.history_id forKey:@"history_id"]; [par setObject:[NSString stringWithFormat:@"%.2f",self.distance] forKey:@"distance"]; [par setObject:[NSString stringWithFormat:@"%d",self.duration] forKey:@"duration"]; return par;}///添加运动轨迹-(NSMutableDictionary *)addTrace:(NSMutableArray *)array{ NSMutableArray * arr = [self setPar:array]; NSMutableDictionary * par= [[NSMutableDictionary alloc]init]; [par setObject:self.history_id forKey:@"history_id"]; [par setObject:[arr objectAtIndex:3] forKey:@"trace_time"]; [par setObject:[arr objectAtIndex:0] forKey:@"latitude"]; [par setObject:[arr objectAtIndex:1] forKey:@"longitude"]; [par setObject:[arr objectAtIndex:2] forKey:@"altitude"]; return par;}-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ //此处locations存储了持续更新的位置坐标值,取最后一个值为最新位置,如果不想让其持续更新位置,则在此方法中获取到一个值之后让locationManager stopUpdatingLocation CLLocation *currentLocation = [locations lastObject]; CLLocationCoordinate2D coor = currentLocation.coordinate;// coor = [self zzTransGPS:coor];///火星GPS// NSLog(@"%f",coor.latitude);// NSLog(@"%f",coor.longitude); coor = [JZLocationConverter wgs84ToGcj02:coor]; self.latitude = coor.latitude; self.longitude = coor.longitude; // NSLog(@"%f",self.latitude);// NSLog(@"%f",self.longitude); //[self.locationManager stopUpdatingLocation]; }-(CLLocationCoordinate2D)zzTransGPS:(CLLocationCoordinate2D)yGps{ int TenLat=0; int TenLog=0; TenLat = (int)(yGps.latitude*10); TenLog = (int)(yGps.longitude*10); int offLat=0; int offLog=0; yGps.latitude = yGps.latitude+offLat*0.0001; yGps.longitude = yGps.longitude + offLog*0.0001; return yGps; }//调整时间格式-(NSString * )setTime:(NSDate *)time{ NSDateFormatter * outputFormatter = [[NSDateFormatter alloc]init]; [outputFormatter setLocale:[NSLocale currentLocale]]; [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString * timeStr = [outputFormatter stringFromDate:time]; timeStr=[NSString stringWithFormat:@"%@%%20%@",[timeStr substringToIndex:10],[timeStr substringFromIndex:11]]; return timeStr;}///设置参数形式-(NSMutableArray *)setPar:(NSMutableArray *)array{ NSMutableArray * parArray = [[NSMutableArray alloc]init]; int n = (int)[array count]; for (int i = 0; i < n; i++) { NSArray * array1 = [NSArray arrayWithArray:[array objectAtIndex:i]]; NSString * temp1 = @""; for (NSString * str in array1) {// if (i == 3)// {// NSString * str1 = [NSString stringWithFormat:@"%@%%20%@",[str substringToIndex:10],[str substringFromIndex:11]];// temp1 = [temp1 stringByAppendingFormat:@",%@",str1];//// }else temp1 = [temp1 stringByAppendingFormat:@",%@",str]; } [parArray addObject:temp1]; } return parArray; }//根据经纬度算距离-(double)GetDistance:(NSString*)lat1 :(NSString *)lon1 :(NSString*)lat2 :(NSString*)lon2{ CLLocation *sanFrancisco = [[CLLocation alloc] initWithLatitude:[lat1 doubleValue] longitude:[lon1 doubleValue]]; CLLocation *portland = [[CLLocation alloc] initWithLatitude:[lat2 doubleValue]longitude:[lon2 doubleValue]]; CLLocationDistance distance = [portland distanceFromLocation:sanFrancisco]; //MKDistanceFormatter *formatter = [[MKDistanceFormatter alloc] init]; //formatter.units = MKDistanceFormatterUnitsMetric;// NSLog(@"%0.0f m",[[NSString stringWithFormat:@"%0.0f",distance] doubleValue]); return [[NSString stringWithFormat:@"%.2f",distance] doubleValue]; //return dist;}///将时间转化成秒-(int)changeSecond:(NSString *)time{ int i = 0; NSArray * temp = [time componentsSeparatedByString:@":" ]; int m = [[temp objectAtIndex:0] intValue]; int s = [[temp objectAtIndex:1] intValue]; i = m * 60 + s; return i;}@end
转载http://www.2cto.com/kf/201410/342368.html
0 0
- iOS地图上WGS84、GCJ-02、BD-09互转解决方案
- iOS地图上WGS84、GCJ-02、BD-09互转解决方案
- iOS地图上WGS84、GCJ-02、BD-09互转解决方案
- iOS地图上WGS84、GCJ-02、BD-09互转解决方案
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- GPS坐标互转、测距:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
- PHP 不同地图坐标系经纬度转换 GCj02 WGS84 BD-09
- iOS 火星坐标(GCJ-02) 转化为百度坐标(BD-09)
- C/C++ 使用ChinaMapShift库 测试互转: 地球WGS-84 火星GCJ-02 百度BD-09
- GCJ-02(火星坐标) 和 BD-09 (百度坐标)
- GCJ-02/BD-09/WGS-84/Web mercator 坐标转换
- google earth baidu map( WGS84 -> GCJ-02)
- [IOS 地图]WGS84坐标转火星坐标(iOS篇)
- !=和!==的区别
- java内存分配 常量池详解
- 生产服务器环境最小化安装后 Centos 6.5优化配置备忘
- Eclipse下导入外部jar包的3种方式
- PHP实现的一个简单的数据库操作类(修改版)
- iOS地图上WGS84、GCJ-02、BD-09互转解决方案
- struts1简单入门使用实例
- 进程上下文
- 花生壳动态域名与固定IP的区别
- 七种方式求斐波那契(Fibonacci)数列通项
- 全文索引(三)lucene 分词器 Analyzer
- 'XXX' was not declared in this scope
- js 循环提交ajax请求
- Nginx+PHP-FPM优化技巧总结