1. 坐标系说明
        开发地图应用服务时,一定会接触到各种坐标系,而保证坐标系的正确与合理是一切数据分析的前提,总的来说,坐标系可以分为两大类:地理坐标系GCS(Geographic Coordinate System)和投影坐标系PCS(Projected Coordinate System),地理坐标系进行地图投影后就变成了投影坐标系。例如我们常见的世界地图,使用的就是一种墨卡托投影。其中地理坐标系又可分为参心坐标系和地心坐标系,常见的参心坐标系北京54、西安80,常见的地心坐标系有WGS84、GCJ02、BD09、GCS2000。

1.1 WGS84(World Geodetic System 1984)
        WGS84 是为 GPS 全球定位系统建立的坐标系统,是世界上第一个统一的地心坐标系,因此也被称为大地坐标系、原始坐标系。一般通过 GPS 记录仪记录下来的经纬度,就是基于 WGS84 坐标系的数据。Google 和高德地图定位的的经纬度(国外)都是基于WGS84坐标系的;但是在国内是不允许直接用 WGS84 坐标系标注的,必须经过加密后才能使用。

1.2 GCJ02(国家测量局02号标准)
        GCJ02 是由中国国家测绘局制订的地理信息系统的坐标系统,是在 WGS84 经纬度的基础上执行加密算法而成。因为 GPS 得到的经纬度直接在 GCJ02 坐标系下会定位到错误的地点,有种到了火星的感觉,因此在坊间也将 GCJ-02 戏称为火星坐标系。

国测局规定,国内出版的各种地图系统(包括电子形式),必须至少采用 GCJ02 对地理位置进行首次加密的坐标系,腾讯(搜搜)地图、阿里云地图、Google和高德(国内)都是使用 GCJ02 坐标系,可以说 GCJ02 是国内最广泛使用的坐标系。

1.3 BD09(百度坐标系09)
        BD09 是在 GCJ02 坐标系的基础上再次加密偏移后形成的坐标系,官方解释为进一步保护用户隐私,当前只适用于百度地图。GPS经纬度是39°54'26.2"N 116°23'28.4"E,转化为度的单位就是39.907270 116.391213(小数部分 = 分 / 60 + 秒 / 3600)

2. 坐标系转换
        国测局规定:互联网地图在国内必须至少使用 GCJ02 进行首次加密,不允许直接使用 WGS84 坐标下的地理数据,同时任何坐标系均不可转换为 WGS84 坐标。因此不存在将 GCJ02 坐标转换为 WGS84 坐标的官方转换方法。
目前百度 API 提供了从其它坐标系转换为 BD09 坐标系的 API,但却没有从 BD09 坐标系转为其他坐标系的API。
2.1 WGS84转换
WGS84转换测试工具 可将 WGS84 转换成 GCJ02、BD09ll 坐标系:

2.2 高德坐标系转换
        高德坐标系转换工具 能够将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成高德坐标:

以上的两个工具可以用来验证Java坐标系转换结果是否正确。

3. Java坐标系转换工具

/*** @author GJN* @create 2022-07-24 14:18*/
public class LocationUtil {public static double pi = 3.1415926535897932384626;public static double a = 6378245.0;public static double ee = 0.00669342162296594323;private static double EARTH_RADIUS = 6378.137;private static double rad(double d) {return d * Math.PI / 180.0;}/*** 通过经纬度获取距离(单位:米)** @param startLat* @param startLng* @param endLat* @param endLng* @return 距离*/public static double getDistance(double startLat, double startLng, double endLat,double endLng) {double radLat1 = rad(startLat);double radLat2 = rad(endLat);double a = radLat1 - radLat2;double b = rad(startLng) - rad(endLng);double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)+ Math.cos(radLat1) * Math.cos(radLat2)* Math.pow(Math.sin(b / 2), 2)));s = s * EARTH_RADIUS;s = Math.round(s * 10000d) / 10000d;s = s * 1000;return s;}/*** wsg84坐标系转GCJ02坐标系** @param lat 纬度* @param lon 经度* @return String[]数组,string[0]是纬度,string[1]是经度*/public static String[] wgs84ToGcj02(double lat, double lon) {String[] info = new String[2];if (outOfChina(lat, lon)) {info[0] = String.valueOf(lat);info[1] = String.valueOf(lon);} else {double dLat = transformLat(lon - 105.0, lat - 35.0);double dLon = transformLon(lon - 105.0, lat - 35.0);double radLat = lat / 180.0 * pi;double magic = Math.sin(radLat);magic = 1 - ee * magic * magic;double sqrtMagic = Math.sqrt(magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);double mgLat = lat + dLat;double mgLon = lon + dLon;info[0] = String.format("%.6f", mgLat);info[1] = String.format("%.6f", mgLon);}return info;}//=============================================私有方法=================================================private static boolean outOfChina(double lat, double lon) {if (lon < 72.004 || lon > 137.8347)return true;if (lat < 0.8293 || lat > 55.8271)return true;return false;}private static double transformLat(double x, double y) {double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;return ret;}private static double transformLon(double x, double y) {double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;return ret;}}

地图坐标的转换与说明相关推荐

  1. 地图坐标格式转换工具

    地图坐标格式转换工具 1.经纬度转换 ,度转度分秒 /*** 经纬度转换 ,度转度分秒* @param str 度数 116.418847* @return 116°25'7.85"*/pu ...

  2. 各系地图坐标互相转换【JS版和Java版】

    各系地图坐标互相转换[JS版和Java版] 坐标说明 1.(地球坐标)美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置. 2.(火星坐标)我国,出于国家安全考虑,国内 ...

  3. android gps 火星坐标,GPS真实坐标与火星地图坐标/百度地图坐标的转换

    #include #include #include static const uint32_t GPSBaud = 9600; TinyGPSPlus gps; HardwareSerial ss( ...

  4. openlayers地图坐标转换为屏幕像素坐标,屏幕像素坐标转成地图实际坐标

    前言: openlayers的地图坐标的转换,地图坐标与屏幕像素坐标的互转. 具体方法: 地图坐标转屏幕像素(getPixelFromCoordinate):入口 屏幕像素转地图坐标(getCoord ...

  5. C#.net 地图控件开发 (一) 控件坐标与地图坐标

    1.       控件坐标与地图坐标的转换 控件坐标是以左上角为基准点(原点0,0),往右为X轴正方向,往下为Y轴正方向的.而地图坐标则是以左下角为基准点,往右为X轴正方向,往上为Y轴正方向,并且可以 ...

  6. 百度地图批量转换 GPS坐标转百度地图坐标 问题

    百度地图的官方网址 官方批量转换的demo 花了几天时间了解了一下百度地图,之前是后端的一个小伙伴在负责,他跟我吐槽这是前端的东西,让我来写(之前他们老大交给他了,我也以为是后端的任务(๑′ᴗ‵๑). ...

  7. C#高德地图坐标和百度坐标互相转换

    C#高德地图坐标和百度坐标互相转换 public class CoordinateConvert{private static double xPi = 3.14159265358979324 * 3 ...

  8. 腾讯地图转换成百度地图坐标

    https://www.jianshu.com/p/0fe30fcd4ae7 一.各个坐标系的概况 众所周知地球是一个不规则椭圆体,GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则 ...

  9. 六边形格子地图坐标计算与转换

    // 世界场景的一些数据管理,如提供坐标转换之类的接口var WorldMapManager = function () {this.mapSize = null; // 地图大小,像素this.cu ...

最新文章

  1. 2019,不可错过的NLP“高光时刻”
  2. rⅰd的意思_Q345R(HIC)和Q345R(R-HIC)化学成分抗氢板
  3. mitmproxy配置代理后 APP连接不到网络 XPosed安装
  4. python数学公式代码导入_在Matplotlib图中插入LaTex公式实例
  5. 机器学习笔记:梯度下降
  6. mysql 字符类型
  7. dp主机_MODBUS 和 PROFIBUS-DP 协议有什么区别
  8. 【渝粤题库】国家开放大学2021春3929电气安全技术题目
  9. 代码只要写得多,就能成为顶尖的架构师?
  10. ICONV for Windows
  11. openwrt路由器更换了Flash之后需要修改的源码
  12. 【10g中db_recovery_file_dest和log_archive_dest参数的关系】
  13. [藏]常用的匹配正则表达式和实例
  14. VS2017安装ImageWatch
  15. adb 查看浏览器内核
  16. Adobe Dreamweaver CS5和Photoshop CS5序列号
  17. 资产初探:信贷资产流转业务及其与资产证券化的区别
  18. 举头皮皮虾机器人_一种仿生水下皮皮虾机器人通信系统的制作方法
  19. Maven resources compiler: Maven project configuration required for module ‘XXX‘ isn‘t available.
  20. 0x01 - 前期信息收集

热门文章

  1. 关于计算机的英语作文初中,关于电脑的英语作文
  2. 前端中DOM是什么,怎样理解dom
  3. 小伙子开超市,抓住“人性贪婪”,二个步骤过后,生意瞬间火爆!
  4. 最新微信记录恢复工具MMRecovery的下载与使用方法
  5. 万豪环保系列之明渠紫外线消毒器
  6. 影评:雨天的水彩画 《爱有天意》观感(转)
  7. 服务器站群16c多少个ip?不同C段IP怎么计算
  8. 电池高压安全注意事项
  9. Hackshanghai 黑马
  10. 求可以进行图片抽签的小程序