用墨卡托和GPS坐标计算距离时误差测试
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果:
- 墨卡托和gps坐标来回转换没有误差。
- 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米。
- 故随着导航距离缩短,误差会逐渐变小。
log
25.780135+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 10.00
25.781216+0800 gps_mktDistanceTest[91276:1928266] gps dis = 9.20
25.781387+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624927.127331,2653334.851787
25.781531+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624927.127331,2653334.851787
25.781669+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 20.00
25.781805+0800 gps_mktDistanceTest[91276:1928266] gps dis = 18.40
25.781952+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624937.127331,2653334.851787
25.782072+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624937.127331,2653334.851787
25.782184+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 30.00
25.782318+0800 gps_mktDistanceTest[91276:1928266] gps dis = 27.59
25.782418+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624947.127331,2653334.851787
25.782547+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624947.127331,2653334.851787
25.785722+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 40.00
25.785817+0800 gps_mktDistanceTest[91276:1928266] gps dis = 36.79
25.785952+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624957.127331,2653334.851787
25.786067+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624957.127331,2653334.851787
25.786170+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 50.00
25.786280+0800 gps_mktDistanceTest[91276:1928266] gps dis = 45.99
25.786379+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624967.127331,2653334.851787
25.786473+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624967.127331,2653334.851787
25.786561+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 60.00
25.786626+0800 gps_mktDistanceTest[91276:1928266] gps dis = 55.19
25.786718+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624977.127331,2653334.851787
25.786878+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624977.127331,2653334.851787
25.787094+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 70.00
25.787273+0800 gps_mktDistanceTest[91276:1928266] gps dis = 64.38
25.787465+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624987.127331,2653334.851787
25.787647+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624987.127331,2653334.851787
25.787853+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 80.00
25.788050+0800 gps_mktDistanceTest[91276:1928266] gps dis = 73.58
25.788224+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12624997.127331,2653334.851787
25.788399+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12624997.127331,2653334.851787
25.788586+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 90.00
25.788826+0800 gps_mktDistanceTest[91276:1928266] gps dis = 82.78
25.789067+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625007.127331,2653334.851787
25.789287+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625007.127331,2653334.851787
25.789430+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 100.00
25.789628+0800 gps_mktDistanceTest[91276:1928266] gps dis = 91.98
25.789865+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625017.127331,2653334.851787
25.790090+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625017.127331,2653334.851787
25.790289+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 110.00
25.790511+0800 gps_mktDistanceTest[91276:1928266] gps dis = 101.18
25.790775+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625027.127331,2653334.851787
25.791032+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625027.127331,2653334.851787
25.791194+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 120.00
25.791390+0800 gps_mktDistanceTest[91276:1928266] gps dis = 110.37
25.791586+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625037.127331,2653334.851787
25.791812+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625037.127331,2653334.851787
25.791985+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 130.00
25.792163+0800 gps_mktDistanceTest[91276:1928266] gps dis = 119.57
25.792457+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625047.127331,2653334.851787
25.792679+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625047.127331,2653334.851787
25.792808+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 140.00
25.793005+0800 gps_mktDistanceTest[91276:1928266] gps dis = 128.77
25.793225+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625057.127331,2653334.851787
25.793416+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625057.127331,2653334.851787
25.793572+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 150.00
25.793735+0800 gps_mktDistanceTest[91276:1928266] gps dis = 137.97
25.793928+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625067.127331,2653334.851787
25.794105+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625067.127331,2653334.851787
25.794290+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 160.00
25.794419+0800 gps_mktDistanceTest[91276:1928266] gps dis = 147.16
25.794611+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625077.127331,2653334.851787
25.794792+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625077.127331,2653334.851787
25.794965+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 170.00
25.795133+0800 gps_mktDistanceTest[91276:1928266] gps dis = 156.36
25.795327+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625087.127331,2653334.851787
25.795490+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625087.127331,2653334.851787
25.795654+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 180.00
25.795776+0800 gps_mktDistanceTest[91276:1928266] gps dis = 165.56
25.795974+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625097.127331,2653334.851787
25.796177+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625097.127331,2653334.851787
25.796311+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 190.00
25.796474+0800 gps_mktDistanceTest[91276:1928266] gps dis = 174.76
25.796658+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625107.127331,2653334.851787
25.796823+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625107.127331,2653334.851787
25.796981+0800 gps_mktDistanceTest[91276:1928266] mkt dis = 200.00
25.797129+0800 gps_mktDistanceTest[91276:1928266] gps dis = 183.96
25.797310+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换前12625117.127331,2653334.851787
25.797474+0800 gps_mktDistanceTest[91276:1928266] 墨卡托坐标 转换后12625117.127331,2653334.851787
code
//
// ViewController.m
// gps_mktDistanceTest
//
#import "ViewController.h"
#import "HTCoorTransformEach/HTCoorTransforEach.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
for (int i = 1; i <= 20; ++i) {
//mkt计算距离
double x0 = 12624917.12733079;
double y0 = 2653334.851787222;
double x1 = x0 + 10 * i;
double y1 = y0;
double dis1 = sqrt(pow(x1 - x0, 2) + pow(y1 - y0, 2));
NSLog(@"mkt dis = %.2f", dis1);
//gps计算距离
HTMktCoor lCoor = {x0, y0};
CLLocationCoordinate2D lGPS0 = [HTCoorTransforEach Mercator2WorldGS:lCoor];
CLLocation *lLoc0 = [[CLLocation alloc] initWithLatitude:lGPS0.latitude longitude:lGPS0.longitude];
HTMktCoor lCoor1 = {x1, y1};
CLLocationCoordinate2D lGPS1 = [HTCoorTransforEach Mercator2WorldGS:lCoor1];
CLLocation *lLoc1 = [[CLLocation alloc] initWithLatitude:lGPS1.latitude longitude:lGPS1.longitude];
HTMktCoor lMkt = [HTCoorTransforEach WorldGS2Mercator:lGPS1];
double gpsDis = [lLoc0 distanceFromLocation:lLoc1];
NSLog(@"gps dis = %.2f", gpsDis);
NSLog(@"墨卡托坐标 转换前%f,%f", x1, y1);
NSLog(@"墨卡托坐标 转换后%f,%f", lMkt.x, lMkt.y);
}
}
@end
//
// HTCoorTransfor.h
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
typedef struct{
///墨卡托x坐标,对应经纬度中的经度
double x;
///墨卡托y坐标,对应经纬度中的纬度
double y;
}HTMktCoor;
NS_ASSUME_NONNULL_BEGIN
@interface HTCoorTransforEach : NSObject
//WGS-84 坐标转换成 墨卡托 坐标
+ (HTMktCoor)WorldGS2Mercator:(CLLocationCoordinate2D)coordinate;
//墨卡托 坐标转换成 WGS-84 坐标
+ (CLLocationCoordinate2D)Mercator2WorldGS:(HTMktCoor)mercator;
@end
NS_ASSUME_NONNULL_END
//
// HTCoorTransfor.m
//
#import "HTCoorTransforEach.h"
@implementation HTCoorTransforEach
//WGS-84 坐标转换成 墨卡托 坐标。警告:墨卡托的x对应经度longtitude,y对应纬度latitude,千万别搞反了!
+ (HTMktCoor)WorldGS2Mercator:(CLLocationCoordinate2D)coordinate
{
double lon = coordinate.longitude*20037508.34/180;
double lat = log(tan((90+coordinate.latitude)*M_PI/360))/(M_PI/180);
lat = lat*20037508.34/180;
HTMktCoor lCoor;
lCoor.x = lon;
lCoor.y = lat;
return lCoor;
}
//墨卡托 坐标转换成 WGS-84 坐标。警告:墨卡托的x对应经度longtitude,y对应纬度latitude,千万别搞反了!
+ (CLLocationCoordinate2D)Mercator2WorldGS:(HTMktCoor)mercator
{
double lon = mercator.x/20037508.34*180;
double lat = mercator.y/20037508.34*180;
lat = 180/M_PI*(2*atan(exp(lat*M_PI/180))-M_PI/2);
return CLLocationCoordinate2DMake(lat, lon);
}
@end
用墨卡托和GPS坐标计算距离时误差测试的更多相关文章
- 计算两个GPS坐标的距离
场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519,113.380301 GPS: 22.511962,113.380301 距离: 284. ...
- 通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ
通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索“通过经纬度坐标计算距离的方法”,发现网上大部分都是如下的代码: #define PI 3.14159265 static double ...
- 通过两个位置的经纬度坐标计算距离(C#版本)
/// <summary> /// 通过地图上的两个坐标计算距离(C#版本) /// Add by 成长的小猪(Jason.Song) on 2017/11/01 /// http://b ...
- 计算2个GPS坐标的距离
本文转自 http://blog.csdn.net/ztp800201/article/details/44676867 Java 计算两个GPS坐标点之间的距离 1. Lat1 Lung1 表示A点 ...
- 根据经纬度坐标计算距离-python
一.两个坐标之间距离计算 参考链接: python实现 1.Python 根据地址获取经纬度及求距离 2.python利用地图两个点的经纬度计算两点间距离 LBS 球面距离公式 美团app筛选“离我最 ...
- 由GPS坐标计算半径
在实际应用当中,一般是通过一个个体的编码来查找该编码对应的地区中心的经纬度,然后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的 ...
- PHP 根据两个坐标计算距离 圆形围栏的计算
可以应用于圆形电子围栏入 出围栏计算 圆形电子围栏的计算方式是: 根据圆心坐标和当前检查的坐标进行距离计算,如果距离长度超出围栏的半径,则判定为出围栏,反之是在围栏之内 <?php /** * ...
- 墨卡托投影, GPS 坐标转像素, GPS 坐标转距离
Before: 1. 研究的需要, 在 google map 上爬取了一些的静态卫星地图图片,每张图片的像素为 256*256 2. 通过 photshop 将这些地图碎片手动拼成了地图, 地图只是覆 ...
- Android给定坐标计算距离
给定两点的经纬度.计算两点之间的距离.这里要注意经纬度一定要依照顺序填写 1. 利用android中的工具获得,单位是米 float[] results=new float[1]; Location. ...
随机推荐
- centos7 yum 安装 mysql5.7
1.查看系统中是否已安装 MySQL 服务,以下提供两种方式: rpm -qa | grep mysqlyum list installed | grep mysql 2.如果已安装则删除 MySQL ...
- m76 赛后总结
这次没有炸的太厉害,只是T3崩了,而且..... 这次的心态并没有因为loj的大吉而崩,反而在经受过上一轮的打击之后变得坚强了,心态也平了,没什么可挂念的,因为我什么都没有,所以发扬光脚的不怕穿鞋的精 ...
- 瞎折腾实录:构建 Armel 版本的 .NET Core 教程和资料资源
目录 首先我要说明,我失败了~ 我把我的进度和经验放出来,希望能够帮助别人完成编译工作~ 背景:最近接手一个华为某型号的嵌入式设备,需要在上面搭建 .NET Core 环境. 设备是 Armel 架构 ...
- 实现支持多用户在线的FTP程序(C/S)
1. 需求 1. 用户加密认证 2. 允许多用户登录 3. 每个用户都有自己的家目录,且只能访问自己的家目录 4. 对用户进行磁盘分配,每一个用户的可用空间可以自己设置 5. 允许用户在ftp ser ...
- Linux服务器更改Apache2默认页面
方式一 获取root权限 su root //或者 sudo -i 进入 /var/www目录下 cd /var/www 创建目录 mkdir -m 777 myhtml // myhtml为自己创建 ...
- Asp.net Core 系列之--4.事务、日志及错误处理
ChuanGoing 2019-11-17 这篇原本时想把事务处理.日志处理.错误处理.授权于鉴权一并介绍完的,授权和鉴权我想结合自定义权限来介绍,全部放到这里篇幅可能太长,因此权限部分将会在下篇来介 ...
- nyoj 26-孪生素数问题(打表)
26-孪生素数问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:43 题目描述: 写一个程序,找出给出素数范围内的所有孪生素数 ...
- nyoj 463-九九乘法表
463-九九乘法表 内存限制:64MB 时间限制:1000ms 特判: No 通过数:16 提交数:41 难度:1 题目描述: 小时候学过的九九乘法表也许将会扎根于我们一生的记忆,现在让我们重温那些温 ...
- 力扣(LeetCode)Excel表列序号 个人题解
给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
- 注意android辅助服务事件不能用于保存
本来希望把来自辅助服务的事件,像epoll那样暂存在队列进行调度,或者做成事件堆栈,从而将辅助服务事件加入到容器.但是一直不能达到预期的后果.最后才发现一个坑人的事实,辅助服务事件被释放(或者说重置) ...