用墨卡托和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,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple 最新软件的错误和性能问题。
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只有5%的概率会遇到选择运营商界面且部分必须连接到iTunes才可以激活
一般在接外包的时候, 通常第三方需要安装你的app进行测试(这时候你的app肯定是还没传到app store之前)。
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了。那么接下来我们看一下Flutter是如何实现的。Flutter中实现整个App变为灰色在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下:ColorFiltered(颜色过滤器)看名字就知道是增加颜色滤镜效果的,ColorFiltered( colorFilter:ColorFilter.mode(Colors.grey, BlendMode.
flutter升级/版本切换
(1)在C++11标准时,open函数的文件路径可以传char指针也可以传string指针,而在C++98标准,open函数的文件路径只能传char指针;(2)open函数的第二个参数是打开文件的模式,从函数定义可以看出,如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开;(3)打开文件时的mode的模式是从内存的角度来定义的,比如:in表示可读,就是从文件读数据往内存读写;out表示可写,就是把内存数据写到文件中;
文章目录方法一:分别将图片和文字置灰UIImage转成灰度图UIColor转成灰度颜色方法二:给App整体添加灰色滤镜参考App页面置灰,本质是将彩色图像转换为灰度图像,本文提供两种方法实现,一种是App整体置灰,一种是单个页面置灰,可结合具体的业务场景使用。方法一:分别将图片和文字置灰一般情况下,App页面的颜色深度是24bit,也就是RGB各8bit;如果算上Alpha通道的话就是32bit,RGBA(或者ARGB)各8bit。灰度图像的颜色深度是8bit,这8bit表示的颜色不是彩色,而是256
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼
让学前端不再害怕英语单词(二),通过本文,可以对css,js和es6的单词进行了在逻辑上和联想上的记忆,让初学者更快的上手前端代码
用Python送你一颗跳动的爱心
在uni-app项目中实现人脸识别,既使用uni-app中的live-pusher开启摄像头,创建直播推流。通过快照截取和压缩图片,以base64格式发往后端。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。
Mac命令行修改ipa并重新签名打包
首先在 iOS 设备中打开开发者模式。位于:设置 - 隐私&安全 - 开发者模式(需重启)
一 现象导入MBProgressHUD显示信息时,出现如下异常现象Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MBProgressHUD", referenced from: objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64clang: error: linker command failed wit
Profiles >> 加号添加 >> Distribution >> "App Store" >> 选择 2.1 创建的App ID >> 选择绑定 2.3 的发布证书(.cer)>> 输入描述文件名称 >> Generate 生成描述文件 >> Download。Certificates >> 加号添加 >> "App Store and Ad Hoc" >> “Choose File...” >> 选择上一步生成的证书请求文件 >> Continue >> Download。
今天有需求,要实现的功能大致如下:在安卓和ios端实现分享功能可以分享链接,图片,文字,视频,文件,等欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~声明:本博文章若非特殊注明皆为原创原文链接。