百度火星坐标互转丨技术开发分享录

百度火星坐标互转

{{ detail.nickname }}

转载 翻译 {{ formatTime(detail.create_time) }} 字数 {{ detail.content && detail.content.length }} 阅读 {{ detail.read_num }} {{ formatTag(v) }}

"## 一、国内常用地图坐标使用介绍\n\n**天地图:**CGCS2000,2000国家大地坐标系;我们其实很多时候直接用WGS84的坐标来代替CGCS2000坐标。因为CGCS2000的定义与WGS84实质一样。采用的参考椭球非常接近。扁率差异引起椭球面上的纬度和高度变化最大达0.1mm。当前测量精度范围内,可以忽略这点差异。可以说两者相容至cm级水平,但若一点的坐标精度达不到cm水平,则不认为CGCS2000和WGS84的坐标是相容的。\n\n**百度地图:**bd09II坐标。首先了解一下火星坐标,它是在国际标准坐标WGS-84上进行的一次加密,由于国内的电子地图都要至少使用火星坐标进行一次加密,百度直接就任性一些,直接自己又研究了一套加密算法,来了个二次加密,这就是我们所熟知的百度坐标(BD-09)。\n\n**高德地图:**gcj02坐标,也称为火星坐标。火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图、导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的。\n\n>[warning] PS:非专业人士,对于墨卡托投影坐标和经纬度坐标可以理解为一个是平面坐标一个是球面坐标。还有用wgs84坐标系的一些地图,比如: osm、谷歌、arcgisonline等。\n\n## 二、坐标转换\n\n### 1、百度坐标转火星坐标\n\n```\nvar x_pi = 3.14159265358979324 * 3000.0 / 180.0;\n\nfunction baiduTomars(baidu_point) {\n    var mars_point = { lon: 0, lat: 0 };\n    var x = baidu_point.lon - 0.0065;\n    var y = baidu_point.lat - 0.006;\n    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);\n    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);\n    mars_point.lon = z * Math.cos(theta);\n    mars_point.lat = z * Math.sin(theta);\n    return mars_point;\n}\nconsole.log(baiduTomars({ lon: 109.812339, lat: 35.944621 }))\n```\n\n### 2、火星坐标转百度坐标\n\n```\nx_pi = 3.14159265358979324 * 3000.0 / 180.0;\n\nfunction marsTobaidu(mars_point) {\n    var baidu_point = { lon: 0, lat: 0 };\n    var x = mars_point.lon;\n    var y = mars_point.lat;\n    var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);\n    var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);\n    baidu_point.lon = z * Math.cos(theta) + 0.0065;\n    baidu_point.lat = z * Math.sin(theta) + 0.006;\n    return baidu_point;\n}\nconsole.log(marsTobaidu({ lon: 109.812339, lat: 35.944621 }))\n```\n\n参考链接:\n\n- https://blog.csdn.net/qq_36377037/article/details/86479796"
PS:写作不易,如要转裁,请标明转载出处。

如果此篇对您有帮助,可小额赞助,以兹鼓励!

猜你想看