第一种:JAVA写法(考虑double精度问题)
package com.thinkgem.jeesite.common.utils;import com.alibaba.dubbo.common.json.JSONObject;import java.math.BigDecimal;/*** 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具*/
public class CoordinateTransformUtil {static String BAIDU_GEOCONV_KEY = "XXXXXXXXXXXXXXXXXXXXXXXX";static String baiduUrl = "http://api.map.baidu.com/geocoder/v2";static int B_DIV_SCALE = 15;static BigDecimal x_pi = new BigDecimal("3.14159265358979324").multiply(new BigDecimal("3000")).divide(new BigDecimal("180"), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP);// πstatic BigDecimal pi = new BigDecimal("3.1415926535897932384626");// 长半轴static BigDecimal a = new BigDecimal("6378245");// 扁率static BigDecimal ee = new BigDecimal("0.00669342162296594323");static BigDecimal b_1 = new BigDecimal("-1");static BigDecimal b_2 = new BigDecimal("10");static BigDecimal b_3 = new BigDecimal("2");static BigDecimal b_4 = new BigDecimal("105");static BigDecimal b_5 = new BigDecimal("3");static BigDecimal b_6 = new BigDecimal("35");static BigDecimal b_7 = new BigDecimal("160");static BigDecimal b_8 = new BigDecimal("1");static BigDecimal b_9 = new BigDecimal("150");static BigDecimal b_10 = new BigDecimal("180");static BigDecimal b_11 = new BigDecimal("0.00002");static BigDecimal b_12 = new BigDecimal("0.000003");static BigDecimal b_13 = new BigDecimal("0.0065");static BigDecimal b_14 = new BigDecimal("0.006");/*** WGS坐标转百度坐标系(BD-09)** @param lng WGS84坐标系的经度* @param lat WGS84坐标系的纬度* @return 百度坐标数组*/public static double[] wgs84tobd09(double lng, double lat) {double[] gcj = wgs84togcj02(lng, lat);double[] bd09 = gcj02tobd09(gcj[0], gcj[1]);return bd09;}/*** 火星坐标系(GCJ-02)转百度坐标系(BD-09)** @param lng 火星坐标经度* @param lat 火星坐标纬度* @return 百度坐标数组* @see 谷歌、高德——>百度*/public static double[] gcj02tobd09(double lng, double lat) {BigDecimal b_lng = new BigDecimal(lng);BigDecimal b_lat = new BigDecimal(lat);BigDecimal z = new BigDecimal(Math.sqrt(b_lng.multiply(b_lng).add(b_lat.multiply(b_lat)).doubleValue())).add(b_11.multiply(new BigDecimal(Math.sin(b_lat.multiply(x_pi).doubleValue()))));BigDecimal theta = new BigDecimal(Math.atan2(b_lat.doubleValue(), b_lng.doubleValue())).add(b_12.multiply(new BigDecimal(Math.cos(b_lng.multiply(x_pi).doubleValue()))));BigDecimal bd_lng = z.multiply(new BigDecimal(Math.cos(theta.doubleValue()))).add(b_13);
//        z * Math.cos(theta) + 0.0065;BigDecimal bd_lat = z.multiply(new BigDecimal(Math.sin(theta.doubleValue()))).add(b_14);return new double[]{bd_lng.doubleValue(), bd_lat.doubleValue()};}/*** WGS84转GCJ02(火星坐标系)** @param lng WGS84坐标系的经度* @param lat WGS84坐标系的纬度* @return 火星坐标数组*/public static double[] wgs84togcj02(double lng, double lat) {BigDecimal b_lng = new BigDecimal(lng + "");BigDecimal b_lat = new BigDecimal(lat + "");if (out_of_china(b_lng, b_lat)) {return new double[]{b_lng.doubleValue(), b_lat.doubleValue()};}BigDecimal dlat = transformlat(b_lng.subtract(b_4), b_lat.subtract(b_6));BigDecimal dlng = transformlng(b_lng.subtract(b_4), b_lat.subtract(b_6));BigDecimal radlat = b_lat.divide(b_10, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi);BigDecimal magic = new BigDecimal(Math.sin(radlat.doubleValue()));magic = b_8.subtract(ee.multiply(magic).multiply(magic));BigDecimal sqrtmagic = new BigDecimal(Math.sqrt(magic.doubleValue()));dlat = (dlat.multiply(b_10)).divide((a.multiply(b_8.subtract(ee))).divide((magic.multiply(sqrtmagic)), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP);dlng = (dlng.multiply(b_10)).divide((a.divide(sqrtmagic, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(Math.cos(radlat.doubleValue())).multiply(pi))), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP);BigDecimal mglat = b_lat.add(dlat);BigDecimal mglng = b_lng.add(dlng);return new double[]{mglng.doubleValue(), mglat.doubleValue()};}/*** 纬度转换** @param lng* @param lat* @return*/public static BigDecimal transformlat(BigDecimal lng, BigDecimal lat) {BigDecimal bet = b_1.multiply(b_2).multiply(b_2).add(b_3.multiply(lng)).add(b_5.multiply(lat)).add(b_3.divide(b_2, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(lat).multiply(lat)).add(b_8.divide(b_2, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(lng).multiply(lat)).add(b_3.divide(b_2, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(Math.sqrt(Math.abs(lng.doubleValue())))));bet = bet.add((b_3.multiply(b_2).multiply(new BigDecimal(Math.sin(b_3.multiply(b_5).multiply(lng).multiply(pi).doubleValue()))).add(b_3.multiply(b_2).multiply(new BigDecimal(Math.sin(b_3.multiply(lng).multiply(pi).doubleValue()))))).multiply(b_3).divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP));bet = bet.add((b_3.multiply(b_2).multiply(new BigDecimal(Math.sin(lat.multiply(pi).doubleValue()))).add(b_3.multiply(b_3).multiply(b_2).multiply(new BigDecimal(Math.sin(lat.divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi).doubleValue()))))).multiply(b_3).divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP));bet = bet.add((b_7.multiply(new BigDecimal(Math.sin(lat.divide(b_5.multiply(b_3).multiply(b_3), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi).doubleValue()))).add(b_7.multiply(b_3).multiply(new BigDecimal(Math.sin(lat.multiply(pi).divide(b_5.multiply(b_2), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue()))))).multiply(b_3).divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP));return bet;}/*** 经度转换** @param lng* @param lat* @return*/public static BigDecimal transformlng(BigDecimal lng, BigDecimal lat) {BigDecimal bet = b_2.multiply(b_2).multiply(b_5).add(lng).add(b_3.multiply(lat)).add(b_8.divide(b_2, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(lng).multiply(lng)).add(b_8.divide(b_2, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(lng).multiply(lat)).add(b_8.divide(b_2, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(Math.sqrt(Math.abs(lng.doubleValue())))));bet = bet.add((b_3.multiply(b_2).multiply(new BigDecimal(Math.sin(b_3.multiply(b_5).multiply(lng).multiply(pi).doubleValue()))).add(b_3.multiply(b_2).multiply(new BigDecimal(Math.sin(b_3.multiply(lng).multiply(pi).doubleValue()))))).multiply(b_3).divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP));bet = bet.add((b_3.multiply(b_2).multiply(new BigDecimal(Math.sin(lng.multiply(pi).doubleValue()))).add(b_3.multiply(b_3).multiply(b_2).multiply(new BigDecimal(Math.sin(lng.divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi).doubleValue()))))).multiply(b_3).divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP));bet = bet.add((b_9.multiply(new BigDecimal(Math.sin(lng.divide(b_3.multiply(b_3).multiply(b_5), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi).doubleValue()))).add(b_9.multiply(b_3).multiply(new BigDecimal(Math.sin(lng.divide(b_5.multiply(b_2), B_DIV_SCALE, BigDecimal.ROUND_HALF_UP).multiply(pi).doubleValue())))).multiply(b_3).divide(b_5, B_DIV_SCALE, BigDecimal.ROUND_HALF_UP)));return bet;}/*** 判断是否在国内,不在国内不做偏移** @param lng* @param lat* @return*/public static boolean out_of_china(BigDecimal lng, BigDecimal lat) {if (lng.compareTo(new BigDecimal("73.66")) < 0 || lng.compareTo(new BigDecimal("135.05")) > 0) {return true;} else if (lat.compareTo(new BigDecimal("3.86")) < 0 || lat.compareTo(new BigDecimal("53.55")) > 0) {return true;}return false;}

GPS经纬度转百度经纬度JAVA相关推荐

  1. 百度经纬度转为谷歌经纬度

    目前有四种经纬度分类 百度经纬度 BD-09 标准经纬度 GPS 谷歌经纬度 GCJ-02(谷歌.高德.腾讯) 搜狗经纬度 (1)其他经纬度转为百度,见百度API:http://developer.b ...

  2. 百度经纬度坐标转换官方方法

    百度经纬度坐标转换官方方法 百度坐标转换官方文档 国内主流坐标系类型: 主要有以下三种 WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系: GCJ02:是由中国国家测 ...

  3. 高德地图经纬度和百度地图经纬度互相转换

    高德经纬度转百度经纬度 http://api.map.baidu.com/geoconv/v1/?coords=113.9609047719607,22.537714359860125&fro ...

  4. android百度地图轨迹实现,android 获取GPS经纬度在百度地图上绘制轨迹

    实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹 1.将经纬度转换成百度地图坐标 /** * 标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成百度地图坐标 ...

  5. java 百度地图 经纬度_Java百度地图经纬度纠偏

    在国内使用电子地图获取到的经纬度都不是真实的经纬度,而是经过一定的算法在真实的经纬度上添加了一个偏移量,且不同的地图有不同的算法.现在告诉大家在java中怎样对百度地图进行纠偏,主要实现将真实的经纬度 ...

  6. 百度地图经纬度计算距离(Java)

    百度地图Java经纬度计算距离 阅读百度地图Web服务api文档 Maven依赖 百度地图经纬度工具类 阅读百度地图Web服务api文档 Maven依赖 <!--baidu--><d ...

  7. android 获取GPS经纬度在百度地图上绘制轨迹

    实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹 1.将经纬度转换成百度地图坐标 /*** 标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成百度地图坐标* ...

  8. GPS经纬度换算成百度坐标

    最近在做一个WAP页面,页面上需要展示公司所在的地图位置,但数据库里保存的是GPS经纬度,需要转换一下才能在网页上显示出来. 如何转换成百度坐标系?官方文档给的是:坐标转换接口非公开.百度搜" ...

  9. android 百度地图 gps数据转换百度经纬度

    [转] http://developer.baidu.com/map/wiki/index.php?title=androidsdk/guide/tool#.E5.9D.90.E6.A0.87.E8. ...

  10. 【百度地图API】如何批量转换为百度经纬度

    摘要: 百度地图API的官网上提供了常用坐标转换的示例.但是,一次只能转换一个,真的非常麻烦!!这里结合了官方的示例,自制一个批量转换工具,供大家参考. ----------------------- ...

最新文章

  1. 因为那里面有我,也有你
  2. Spring Boot 之发送邮件
  3. bitdock系统错误_BitDock比特工具栏
  4. MYSQL中replace into的用法
  5. bzoj1193 [HNOI2006]马步距离 构造+枚举
  6. 高级函数技巧-函数柯里化
  7. Objective-C中的UIScrollView
  8. 栈溢出脚本_CTF必备技能丨Linux Pwn入门教程——栈溢出基础
  9. 人大金仓数据库(kingbase7d)操作入门指南
  10. The Amazon Appstore is not currently available in your country
  11. 微信支付密码忘了怎么办
  12. GL/gl.h: No such file or directory
  13. 软件架构模式 mark Richards - 读后总结 2 事件驱动架构
  14. Visual Studio 2017 智能提示英文怎么切换成中文?
  15. 商标注册的费用是多少钱
  16. Android EditText限制输入表情和特殊符号的处理
  17. 2013年1月CPU性能天梯图
  18. android native 代码内存泄露 定位方案
  19. 网站推广方法之快捷网址推广方法
  20. ARM立即寻址中有效立即数的计算

热门文章

  1. VUE3中使用粒子特效
  2. w10打游戏老是弹出计算机,有效解决win10玩游戏弹出输入法的问题
  3. snipaste滚动截图方法_不同级别的截图工具,快来按需领取吧
  4. 华为鸿蒙操作系统国美通讯,国美通讯(600898)03月06日14:30大单揭秘
  5. 想找一款读书笔记软件?快来试试BookxNote
  6. android 9.0极光推送闪退,极光推送集成Module中遇到的坑
  7. (三)smali 入门
  8. [资源数据]民族代码
  9. js 56个民族 数据
  10. iOS UITextView字数限制 拼音