在地图学中,一般将坐标分为投影坐标和地理坐标。地理坐标和投影坐标的联系和区别对于一般的地图使用者而言可能并不需要掌握的非常清楚。通俗一点来说,地理坐标是一个球体的坐标,而投影坐标是一个平面的坐标。常用的GPS、百度地图、高德地图等都是采用的地理坐标。
确定了地理坐标之后,常见的地图应用分别采用的都是什么坐标系呢?一般来说,国外的一些地图,都是采用WGS84坐标系,比如谷歌地图、OMS地图、Bing地图(非中国区域)等。而国内的地图,处于保密需求,大多采用火星坐标系,在WGS84的基础上作了一些偏移,如高德地图、腾讯地图等。而百度又在火星坐标系的基础上又作了一定偏移,生成了自己的百度坐标系。

作者:家琦的三亩地
链接:https://www.jianshu.com/p/ee7dcac935cf
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

WGS84:谷歌地图 OMS
火星坐标系:高德地图 腾讯地图
百度坐标系:百度地图

这些加密算法,一般是无法准确还原的,但是在小范围内的数据,可以通过一定的变换相互转化。具体的C#代码如下

    调用示例如下//GPSPoint point = new GPSPoint();//point.lat = (double) decimal_lat;//point.lng = (double) decimal_lon;//point = GPSTransformer.transform(point, "84转百度");/// </summary>public struct GPSPoint{public double lng;public double lat;}/// <summary>///坐标系转换帮助类/// </summary>/// WGS84:谷歌地图 OMS/// 火星坐标系:高德地图 腾讯地图/// 百度坐标系:百度地图/// 7/// 在地图学中,一般将坐标分为投影坐标和地理坐标。地理坐标和投影坐标的联系和区别对于一般的地图使用者而言可能并不需要掌握的非常清楚。通俗一点来说,地理坐标是一个球体的坐标,而投影坐标是一个平面的坐标。常用的GPS、百度地图、高德地图等都是采用的地理坐标。//确定了地理坐标之后,常见的地图应用分别采用的都是什么坐标系呢?一般来说,国外的一些地图,都是采用WGS84坐标系,比如谷歌地图、OMS地图、Bing地图(非中国区域)等。而国内的地图,处于保密需求,大多采用火星坐标系,在WGS84的基础上作了一些偏移,如高德地图、腾讯地图等。而百度又在火星坐标系的基础上又作了一定偏移,生成了自己的百度坐标系。//这些加密算法,一般是无法准确还原的,但是在小范围内的数据,可以通过一定的变换相互转化。具体的C#代码如下//作者:家琦的三亩地//链接:https://www.jianshu.com/p/ee7dcac935cfpublic class GPSTransformer{const double x_pi = 3.14159265358979324 * 3000.0 / 180.0;const double pi = 3.1415926535897932384626; // πconst double a = 6378245.0;// 长半轴const double ee = 0.00669342162296594323; // 扁率//火星转百度public static GPSPoint gcj02tobd09(GPSPoint HxCor){double z = Math.Sqrt(HxCor.lng * HxCor.lng + HxCor.lat * HxCor.lat) + 0.00002 * Math.Sin(HxCor.lat * x_pi);double theta = Math.Atan2(HxCor.lat, HxCor.lng) + 0.000003 * Math.Cos(HxCor.lng * x_pi);GPSPoint BaiduCor;BaiduCor.lng = z * Math.Cos(theta) + 0.0065;BaiduCor.lat = z * Math.Sin(theta) + 0.006;return BaiduCor;}//百度转火星public static GPSPoint bd09togcj02(GPSPoint Bd){double x = Bd.lng - 0.0065;double y = Bd.lat - 0.006;double z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * x_pi);double theta = Math.Atan2(y, x) - .000003 * Math.Cos(x * x_pi);GPSPoint hx;hx.lng = z * Math.Cos(theta);hx.lat = z * Math.Sin(theta);return hx;}//WGS84转火星public static GPSPoint wgs84togcj02(GPSPoint wgs84){if (OutOfChina(wgs84)){return wgs84;}double dlat = transformlat(wgs84.lng - 105.0, wgs84.lat - 35.0);double dlng = transformlng(wgs84.lng - 105.0, wgs84.lat - 35.0);double radlat = wgs84.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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.Cos(radlat) * pi);GPSPoint hx;hx.lat = wgs84.lat + dlat;hx.lng = wgs84.lng + dlng;return hx;}//火星转84public static GPSPoint gcj02towgs84(GPSPoint hx){if (OutOfChina(hx)){return hx;}double dlat = transformlat(hx.lng - 105.0, hx.lat - 35.0);double dlng = transformlng(hx.lng - 105.0, hx.lat - 35.0);double radlat = hx.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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.Cos(radlat) * pi);GPSPoint wgs84;double mglat = hx.lat + dlat;double mglng = hx.lng + dlng;wgs84.lat = hx.lat * 2 - mglat;wgs84.lng = hx.lng * 2 - mglng;return wgs84;}//百度转84public static GPSPoint bd09towgs84(GPSPoint bd){GPSPoint hx = bd09togcj02(bd);GPSPoint wgs84 = gcj02towgs84(hx);return wgs84;}//84转百度public static GPSPoint wgs84tobd09(GPSPoint wgs84){GPSPoint hx = wgs84togcj02(wgs84);GPSPoint bd = gcj02tobd09(hx);return bd;}/*辅助函数*///判断是否在国内private static Boolean OutOfChina(GPSPoint wgs84){if (wgs84.lng < 72.004 || wgs84.lng > 137.8347){return true;}if (wgs84.lat < 0.8293 || wgs84.lat > 55.8271){return true;}return false;}/*辅助函数*///转换latprivate static double transformlat(double lng, double lat){double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat +0.1 * lng * lat + 0.2 * Math.Sqrt(Math.Abs(lng));ret += (20.0 * Math.Sin(6.0 * lng * pi) + 20.0 *Math.Sin(2.0 * lng * pi)) * 2.0 / 3.0;ret += (20.0 * Math.Sin(lat * pi) + 40.0 *Math.Sin(lat / 3.0 * pi)) * 2.0 / 3.0;ret += (160.0 * Math.Sin(lat / 12.0 * pi) + 320 *Math.Sin(lat * pi / 30.0)) * 2.0 / 3.0;return ret;}/*辅助函数*///转换lngprivate static double transformlng(double lng, double lat){double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng +0.1 * lng * lat + 0.1 * Math.Sqrt(Math.Abs(lng));ret += (20.0 * Math.Sin(6.0 * lng * pi) + 20.0 *Math.Sin(2.0 * lng * pi)) * 2.0 / 3.0;ret += (20.0 * Math.Sin(lng * pi) + 40.0 *Math.Sin(lng / 3.0 * pi)) * 2.0 / 3.0;ret += (150.0 * Math.Sin(lng / 12.0 * pi) + 300.0 *Math.Sin(lng / 30.0 * pi)) * 2.0 / 3.0;return ret;}// 按类计算public static GPSPoint transform(GPSPoint corOld, string transType){switch (transType){case "百度转火星":return GPSTransformer.bd09togcj02(corOld);case "百度转84":return GPSTransformer.bd09towgs84(corOld);case "火星转84":return GPSTransformer.gcj02towgs84(corOld);case "84转火星":return GPSTransformer.wgs84togcj02(corOld);case "火星转百度":return GPSTransformer.gcj02tobd09(corOld);case "84转百度":return GPSTransformer.wgs84tobd09(corOld);default:return corOld;}}}//public class GPSPoint//{//    private double lat;// 纬度//    private double lng;// 经度//    public GPSPoint()//    {//    }//    public GPSPoint(double lng, double lat)//    {//        this.lng = lng;//        this.lat = lat;//    }//    public double GetLat()//    {//        return lat;//    }//    public void SetLat(double lat)//    {//        this.lat = lat;//    }//    public double GetLng()//    {//        return lng;//    }//    public void SetLng(double lng)//    {//        this.lng = lng;//    }//}

地图--WGS84 高德坐标 百度坐标的相互转换(好用推荐)相关推荐

  1. IOS 地球坐标-火星坐标-百度坐标 转换

    如果你正需要这样的工具,保证拿过去就能用 如果你还不知道这是什么工具,我保证以后的iOS开发中肯定会用 如果你是iOS大牛,期待您能指点一下 ^_^ 好了,废话不多说了.上干货 坐标系介绍 首先介绍一 ...

  2. 火星坐标, WGS84坐标, 百度坐标

    地图坐标系目前包括: 地球坐标 (WGS84) WGS84:World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统. 国际标准,从 GPS 设备中取出的数据的 ...

  3. [转]地球坐标 火星坐标 百度坐标 相互转换

    在开始这个题目之前,先给大家再次扫扫盲,扫的不是坐标系统的盲,而是我们国家所使用的坐标系统.大家都知道,美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置,这应该是国际 ...

  4. 地球坐标 火星坐标 百度坐标 相互转换

    在开始这个题目之前,先给大家再次扫扫盲,扫的不是坐标系统的盲,而是我们国家所使用的坐标系统.大家都知道,美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置,这应该是国际 ...

  5. 【iOS】调起地图进行导航(系统地图、高德、百度)

    主要代码: 1,调用iOS系统的apple map 1.1 首先添加相对应的库MapKit.framework 1.2 然后导入头文件 #import <MapKit/MapKit.h> ...

  6. android 与地图互动,高德、百度和腾讯三家比拼,哪个 Android 车机地图 App 更好用?...

    写在前面 不管是自己开车.还是平时打车,相信你一定留意过驾驶座旁边位于车辆中间的那块大屏幕,不管是平时开车导航.放音乐,还是通过倒车影像辅助倒车,都离不开这块屏幕,这就是中控车机. 中控车机往往搭载的 ...

  7. JAVA实用工具类-GPS,高德,百度坐标相互转换

    经过本人实际验证,此工具类的转换方法靠谱,所以拿出来给大家分享. 验证方式有二: 1,通过此工具类转换的坐标和调百度高德地图转换后的坐标,进行对比,误差在小数点后四到五位才出现. 2,把用此工具类转换 ...

  8. 调起地图(高德、百度、Apple、Google)URL API

    原文链接:https://blog.csdn.net/cooldragon/article/details/20642131 移动应用中,如何在自己的App中调起第三方的原生地图App,并显示相关的信 ...

  9. 高端地图导航代码android,ReactNative 调用手机地图(高德、百度)导航 Android(示例代码)...

    /***@parampkgName *@paramparam*/@ReactMethodpublic void openNavMap(String pkgName, String param, fin ...

最新文章

  1. hive内部表与外部表区别
  2. 推荐:制作地图的网站和工具
  3. 通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分
  4. Windows Mobile Topics at TechEd 2008
  5. xpe低配置系统解决“写缓存失败”问题
  6. JEECG智能开发平台-项目选型最爱
  7. vue、bus 使用遇到的坑,组件之间无法传值;vue、bus 第一次获取不到值,后面再点击重复执行
  8. Web服务软件工厂(WSSF)演练之三:创建服务契约和实现方法
  9. java框架实例---自定义标签实例
  10. arcengine动态显示所需字段值
  11. 小白成长建议(9)-苞丁解牛
  12. 二分法04:猜数字大小
  13. 无线网络 设置网关和服务器,我家的网络连接的IP是 192.168.1.223 我想问网关是多少 服务器是...
  14. 膜拜NFC解锁(靠近即开锁)
  15. python超市管理系统实训报告_java超市管理系统实训报告
  16. 安装Flash Builder4.6遇到的问题
  17. android 仿QQ相册
  18. Ubuntu18.04更改图片尺寸和格式
  19. 用几何语言表示线段ab的中点c,七年级上册数学第四章教案
  20. 公路自行车入门级推荐java_想玩公路自行车,有没有入门推荐?

热门文章

  1. java 设计模式 常用21种
  2. android连接雷电模拟器,android studio连接雷电模拟器 【AS 模拟器】
  3. 团队作业第二次——需求分析
  4. 【校招笔试】网易校招网络笔试题,菜的抠脚,蠢的流泪
  5. 几款非常优秀且常用的代码编辑器
  6. python--生成器
  7. windows命令行工具(转)
  8. 职场生存--向上管理
  9. java课程设计模板_《JAVA课程设计模板.doc
  10. 阿里10年:一个普通技术人的成长之路