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坐标计算距离时误差测试的更多相关文章

  1. 计算两个GPS坐标的距离

    场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519,113.380301 GPS: 22.511962,113.380301 距离: 284. ...

  2. 通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ

    通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索“通过经纬度坐标计算距离的方法”,发现网上大部分都是如下的代码: #define PI 3.14159265 static double ...

  3. 通过两个位置的经纬度坐标计算距离(C#版本)

    /// <summary> /// 通过地图上的两个坐标计算距离(C#版本) /// Add by 成长的小猪(Jason.Song) on 2017/11/01 /// http://b ...

  4. 计算2个GPS坐标的距离

    本文转自 http://blog.csdn.net/ztp800201/article/details/44676867 Java 计算两个GPS坐标点之间的距离 1. Lat1 Lung1 表示A点 ...

  5. 根据经纬度坐标计算距离-python

    一.两个坐标之间距离计算 参考链接: python实现 1.Python 根据地址获取经纬度及求距离 2.python利用地图两个点的经纬度计算两点间距离 LBS 球面距离公式 美团app筛选“离我最 ...

  6. 由GPS坐标计算半径

    在实际应用当中,一般是通过一个个体的编码来查找该编码对应的地区中心的经纬度,然后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的 ...

  7. PHP 根据两个坐标计算距离 圆形围栏的计算

    可以应用于圆形电子围栏入 出围栏计算 圆形电子围栏的计算方式是: 根据圆心坐标和当前检查的坐标进行距离计算,如果距离长度超出围栏的半径,则判定为出围栏,反之是在围栏之内 <?php /** * ...

  8. 墨卡托投影, GPS 坐标转像素, GPS 坐标转距离

    Before: 1. 研究的需要, 在 google map 上爬取了一些的静态卫星地图图片,每张图片的像素为 256*256 2. 通过 photshop 将这些地图碎片手动拼成了地图, 地图只是覆 ...

  9. Android给定坐标计算距离

    给定两点的经纬度.计算两点之间的距离.这里要注意经纬度一定要依照顺序填写 1. 利用android中的工具获得,单位是米 float[] results=new float[1]; Location. ...

随机推荐

  1. Charles抓取HTTPS数据包方法

    设置代理端口8888 ssl代理设置 允许所有地址连接 手机获取证书之前,先在电脑安装证书,需要信任.help-->ssl-proxying-->Install Charles Root ...

  2. 一些 bypass WAF 技巧

    也是之前讲课写的,现在搬运过来 --- WAF所处的位置 * 云WAF * 硬件WAF * 软件WAF * 代码级WAF   WAF的绕过 1 架构层    1 对于云WAF,寻找真实ip       ...

  3. MySQL系列:走进数据库,相关概念你都明白吗?

    数据库,一个我们常常提到的名词,但是你有没有想过,它到底是什么意思呢,而我们常说的 MySQL.Oracle 等又到底指什么呢? 数据库 数据库(DataBase),简称 DB,是数据库是存储数据的集 ...

  4. hexo搭建简易的博客网站

    0.环境检测 1.系统升级(图形更新) #update-manager 检测状态 2.检测升级(命令更新) #sudo apt update #sudo apt -y dist-upgrade 一.安 ...

  5. HTTP的请求方式

    GET 请求获取 Request-URI 所标识的资源POST 在 Request-URI 所标识的资源后附加新的数据HEAD  请求获取由 Request-URI 所标识的资源的响应消息报头PUT ...

  6. [UWP]通过自定义XamlCompositionBrushBase实现图片平铺

    1. 什么是XamlCompositionBrushBase 我早就想试试自定义XamlCompositionBrushBase,但一直没机会.上一篇文章介绍到使用Win2D的BorderEffect ...

  7. Zabbix安装部署实践

    操作系统: [root@mysql ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) Mysql :     版本5.7 ...

  8. java编程思想第四版第十章习题

    第一题 package net.mindview.innerclasses; public class Outer { class Inner { Inner(){ System.out.printl ...

  9. pat 1136 A Delayed Palindrome(20 分)

    1136 A Delayed Palindrome(20 分) Consider a positive integer N written in standard notation with k+1 ...

  10. nyoj 311-完全背包 (动态规划, 完全背包)

    311-完全背包 内存限制:64MB 时间限制:4000ms Special Judge: No accepted:5 submit:7 题目描述: 直接说题意,完全背包定义有N种物品和一个容量为V的 ...