火星坐标系统_怎样算自己的上升星座

火星坐标系统_怎样算自己的上升星座其原理是这样的:保密局开发了一个系统,能将实际的坐标转换成虚拟的坐标。所有在中国销售的数字地图必须使用这个系统进行坐标转换之后方可上市。这是生产环节,这种电子地图被称为火星地图。在使用环节,GPS终端

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

其原理是这样的:保密局开发了一个系统,能将实际的坐标转换成虚拟的坐标。所有在中国销售的数字地图必须使用这个系统进行坐标转换之后方可上市。这是生产环节,这种电子地图被称为火星地图。在使用环节,GPS终端设备必须集成保密局提供的加密算法(集成工作由保密局完成),把从GPS卫星那里得到的坐标转换成虚拟坐标,然后再去火星地图上查找,这样就在火星坐标系上完成了地图的匹配。 所以大家所用的百度,高德等地图定位准是偏差几百米

名词总结:

地球坐标:指WGS84坐标系统

火星坐标:指使用国家保密插件人为偏移后的坐标
地球地图:指与地球坐标对应的客观真实的地图
火星地图:指经过加密偏移后的,与火星坐标对应的地图

坐标系转换算法

1.GCJ-02(火星坐标系)和BD-09转换

// GCJ-02 坐标转换成 BD-09 坐标
+ (CLLocationCoordinate2D)MarsGS2BaiduGS:(CLLocationCoordinate2D)coordinate
{
    double x_pi = PI * 3000.0 / 180.0;
    double x = coordinate.longitude, y = coordinate.latitude;
    double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
    double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
    double bd_lon = z * cos(theta) + 0.0065;
    double bd_lat = z * sin(theta) + 0.006;
    return CLLocationCoordinate2DMake(bd_lat, bd_lon);
}
 
// BD-09 坐标转换成 GCJ-02 坐标
+ (CLLocationCoordinate2D)BaiduGS2MarsGS:(CLLocationCoordinate2D)coordinate
{
    double x_pi = PI * 3000.0 / 180.0;
    double x = coordinate.longitude - 0.0065, y = coordinate.latitude - 0.006;
    double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
    double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
    double gg_lon = z * cos(theta);
    double gg_lat = z * sin(theta);
    return CLLocationCoordinate2DMake(gg_lat, gg_lon);
}

2WGS-84(地球坐标系)和BD-09(百度坐标)转换

 

 1 // WGS-84 坐标转换成 BD-09 坐标
 2 + (CLLocationCoordinate2D)WorldGS2BaiduGS:(CLLocationCoordinate2D)coordinate
 3 {
 4     CLLocationCoordinate2D mars = [ALDGeocoder WorldGS2MarsGS:coordinate];
 5     CLLocationCoordinate2D baidu = [ALDGeocoder MarsGS2BaiduGS:mars];
 6     return baidu;
 7 }
 8  
 9 // BD-09 坐标转换成 WGS-84 坐标
10 + (CLLocationCoordinate2D)BaiduGS2WorldGS:(CLLocationCoordinate2D)coordinate
11 {
12     CLLocationCoordinate2D mars = [ALDGeocoder BaiduGS2MarsGS:coordinate];
13     CLLocationCoordinate2D world = [ALDGeocoder MarsGS2WorldGS:mars];
14     return world;
15 }

 

3.WGS-84和sogou坐标转换

 1 // WGS-84 坐标转换成 Sogou 坐标  2 + (CLLocationCoordinate2D)WorldGS2SogouGS:(CLLocationCoordinate2D)coordinate  3 {  4 const double ee = 0.082271854224939184;  5 double lon = coordinate.longitude;  6 double lat = coordinate.latitude;  7 double dlon = [ALDGeocoder rad:CLIP(lon, -360, 360)];  8 double dlat = [ALDGeocoder rad:CLIP(lat, -90, 90)];  9 dlon = 6378206.4 * dlon; 10 double sinphi = sin(dlat); 11 double temp1, temp2; 12 if((temp1 = 1.0 + sinphi) == 0.0){ 13 dlat = -1000000000; 14 }else if((temp2 = 1.0 - sinphi) == 0.0){ 15 dlat = 1000000000; 16 }else{ 17 double esinphi = ee * sinphi; 18 dlat = 3189103.2000000002 * log((temp1 / temp2) * pow((1.0 - esinphi) / (1.0 + esinphi), ee)); 19  } 20 return CLLocationCoordinate2DMake(dlat, dlon); 21 } 22 23 // Sogou 坐标转换成 WGS-84 坐标 24 + (CLLocationCoordinate2D)SogouGS2WorldGS:(CLLocationCoordinate2D)coordinate 25 { 26 const double ee = 1.5707963267948966; 27 const double aa = 0.0033938814110493522; 28 double lon = coordinate.longitude; 29 double lat = coordinate.latitude; 30 double dlon = lon / 6378206.4; 31 double temp = -lat / 6378206.4; 32 double chi; 33 if(temp < -307){ 34 chi = ee; 35 }else if(temp > 308){ 36 chi = -ee; 37 }else{ 38 chi = ee - 2 * atan(exp(temp)); 39  } 40 double chi2 = 2 * chi; 41 double coschi2 = cos(chi2); 42 double dlat = chi + sin(chi2) * (aa + coschi2 * (1.3437644537757259E-005 + coschi2 * (7.2964865099246009E-008 + coschi2 * 4.4551470401894685E-010))); 43 double rlon = CLIP([ALDGeocoder deg:dlon], -360, 360); 44 double rlat = CLIP([ALDGeocoder deg:dlat], -90, 90); 45 return CLLocationCoordinate2DMake(rlat, rlon); 46 }

4火星坐标和地球坐标转换

 1 // World Geodetic System ==> Mars Geodetic System  2 + (CLLocationCoordinate2D)WorldGS2MarsGS:(CLLocationCoordinate2D)coordinate  3 {  4 // a = 6378245.0, 1/f = 298.3  5 // b = a * (1 - f)  6 // ee = (a^2 - b^2) / a^2;  7 const double a = 6378245.0;  8 const double ee = 0.00669342162296594323;  9 10 if (outOfChina(coordinate.latitude, coordinate.longitude)) 11  { 12 return coordinate; 13  } 14 double wgLat = coordinate.latitude; 15 double wgLon = coordinate.longitude; 16 double dLat = transformLat(wgLon - 105.0, wgLat - 35.0); 17 double dLon = transformLon(wgLon - 105.0, wgLat - 35.0); 18 double radLat = wgLat / 180.0 * PI; 19 double magic = sin(radLat); 20 magic = 1 - ee * magic * magic; 21 double sqrtMagic = sqrt(magic); 22 dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI); 23 dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * PI); 24 25 return CLLocationCoordinate2DMake(wgLat + dLat, wgLon + dLon); 26 } 27 28 // Mars Geodetic System ==> World Geodetic System 29 + (CLLocationCoordinate2D)MarsGS2WorldGS:(CLLocationCoordinate2D)coordinate 30 { 31 double gLat = coordinate.latitude; 32 double gLon = coordinate.longitude; 33 CLLocationCoordinate2D marsCoor = [ALDGeocoder WorldGS2MarsGS:coordinate]; 34 double dLat = marsCoor.latitude - gLat; 35 double dLon = marsCoor.longitude - gLon; 36 return CLLocationCoordinate2DMake(gLat - dLat, gLon - dLon); 37 }

5WGS-84 和 墨卡托 坐标转换

 1 //WGS-84 坐标转换成 墨卡托 坐标  2 + (CLLocationCoordinate2D)WorldGS2Mercator:(CLLocationCoordinate2D)coordinate  3 {  4 double lon = coordinate.longitude*20037508.34/180;  5 double lat = log(tan((90+coordinate.latitude)*M_PI/360))/(M_PI/180);  6 lat = lat*20037508.34/180;  7 return CLLocationCoordinate2DMake(lat, lon);  8 }  9 10 //墨卡托 坐标转换成 WGS-84 坐标 11 + (CLLocationCoordinate2D)Mercator2WorldGS:(CLLocationCoordinate2D)mercator 12 { 13 double lon = mercator.longitude/20037508.34*180; 14 double lat = mercator.latitude/20037508.34*180; 15 lat = 180/M_PI*(2*atan(exp(lat*M_PI/180))-M_PI/2); 16 return CLLocationCoordinate2DMake(lat, lon); 17 }

 

开发时所面临的现状

获取经纬度(GPS)

  • 火星坐标

    • MKMapView

  • 地球坐标

    • CLLocationManager

显示经纬度(地图)

  • 火星坐标

    • iOS 地图

    • Gogole地图

    • 搜搜、阿里云、高德地图

  • 地球坐标

    • Google 卫星地图(国外地图应该都是……)

  • 百度坐标

    • 百度地图

推荐的解决方案:

    • 既然是在国内,存储一律用火星坐标,这样在使用国内地图显示时最方便(用百度地图显示时可以一次转换取得)

    • CLLocationManager 拿到的 CLLocation 转为火星坐标,MKMapView 不用处理

    • 使用地图 API 进行 地址解析/逆地址解析(Geocoding) 时注意相应使用相应地图商的坐标系

    • 部分地图商支持多个坐标系输入,如高德支持地球、火星坐标(这个一直有变动,具体只能参考厂商最新文档了

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167575.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 搭建网络SDN(企业网络环境搭建)

    1.     搭建环境要求:图1中控制器可以自主选择,既可选择各种开源的控制器(例如:Floodlight、Ryu、Nox、Beacon、Trema、OpenDaylight等),也可选择由本次大赛设备提供商所提供的闭源控制器。拓扑中各网络部件既可以是仿真环境实现(例如mininet,OpenvSwtich),有条件的队伍也可以通过物理设备实现,两种方案不影响必答题的评分。2.     操作

  • Win10自动更新永久关闭,有效的Win10强制更新关闭方法,禁止windows10自动更新,禁止update medic service ,win10显示更新并关机没有单独的关机按钮[通俗易懂]

    Win10自动更新永久关闭,有效的Win10强制更新关闭方法,禁止windows10自动更新,禁止update medic service ,win10显示更新并关机没有单独的关机按钮[通俗易懂]禁用update服务,光这个不行,下边还有windowsupdatemedicservice禁止流程鼠标右键此电脑–>管理–>服务和应用程序–>服务–>windowsupdate–>选择禁用,如果该服务已经启动,记得点击停止,然后点击右下角的应用再确定,确定,就禁止了update服务,但是这个貌似有时候就又启动了,再往下看禁用windowsup…

  • mxgraph渲染页面_graph绘图

    mxgraph渲染页面_graph绘图Web绘图——mxGraph项目实战(精华篇)需求由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式,并且连接相邻动作的弧上标有执行此次相邻动作的频次,每个动作另附有一个数据集,这样有向图加数据集就构成了用户交互图。为此,自己想到了mxGraph,遂决定学习之。起步此次项目实战是受阅读参考文献[1]启发,并在其图形布局实例基础上进行。其

    2022年10月25日
  • winserver2016无法从WSUS获取补丁

    winserver2016无法从WSUS获取补丁Qwinserver2016有版镜像安装的系统无法获取WSUS的补丁。镜像:SW_DVD9_Win_Svr_STD_Core_and_DataCtr_Core_2016_64Bit_English_-2_MLF_X21-22843OSName:MicrosoftWindowsServer2016StandardOSVersion:10.0.14393N/ABu…

  • 电脑桌面图标点击打不开怎么办_双击桌面图标打开的是属性

    电脑桌面图标点击打不开怎么办_双击桌面图标打开的是属性在网上我们经常会看到有人提问“怎样解决笔记本电脑双击桌面图标打不开”的问题,引发该问题的原因是exe文件的关联损坏了,当然系统中毒也可能导致此现象,那么我们该如何解决这个问题呢?下面就由学习啦小编跟大家分享具体的处理方法吧,希望对大家有所帮助~笔记本电脑双击桌面图标打不开的两个处理方法笔记本电脑双击桌面图标打不开的处理方法一:1、点击屏幕左下角的开始菜单按钮,然后再点击“所有程序”;2、接着点击“…

  • 这几天收到了同学们提交的赛道设计图纸[通俗易懂]

     §01室外越野▲图1.1室外越野赛道▲图1.2室外越野赛道设计图纸 §02单车拉力▲图2.1单车拉力快车道 §03室内PVC赛道一、坡道1、背景布下的桥还有,这样的坡道比赛时可以用吗?本来是防止单车摔下来的。▲图3.1蓝布下的坡道回复:这是允许的。2、桥连着桥卓大大,这个可以么,桥接桥?▲图3.2连体桥回复:这是允许的。 §04相关问题一、环境改变卓大大好,,我们现在的场地上面

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号