package com.xxx.utils;

/**

* gps纠偏算法,适用于google,高德体系的地图

*/

public abstract class GpsUtil {

private final static double a = 6378245.0;

private final static double pi = 3.14159265358979324;

private final static double ee = 0.00669342162296594323;

/**

* 计算地球上任意两点(经纬度)距离

*

* @param long1

* 第一点经度

*

* @param lat1

* 第一点纬度

*

* @param long2

* 第二点经度

*

* @param lat2

* 第二点纬度

*

* @return 返回距离 单位:米

*/

public static double distance(double long1, double lat1, double long2, double lat2) {

double a, b, R;

R = 6378137; // 地球半径

lat1 = lat1 * Math.PI / 180.0;

lat2 = lat2 * Math.PI / 180.0;

a = lat1 - lat2;

b = (long1 - long2) * Math.PI / 180.0;

double d;

double sa2, sb2;

sa2 = Math.sin(a / 2.0);

sb2 = Math.sin(b / 2.0);

d = 2 * R * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));

return d;

}

/** WGS-84 to GCJ-02 */

public static double[] toGCJ02Point(double latitude, double longitude) {

double[] dev = calDev(latitude, longitude);

double retLat = latitude + dev[0];

double retLon = longitude + dev[1];

return new double[] { retLat, retLon };

}

/** GCJ-02 to WGS-84 */

public static double[] toWGS84Point(double latitude, double longitude) {

double[] dev = calDev(latitude, longitude);

double retLat = latitude - dev[0];

double retLon = longitude - dev[1];

dev = calDev(retLat, retLon);

retLat = latitude - dev[0];

retLon = longitude - dev[1];

return new double[] { retLat, retLon };

}

private static double[] calDev(double wgLat, double wgLon) {

if (isOutOfChina(wgLat, wgLon)) {

return new double[] { 0, 0 };

}

double dLat = calLat(wgLon - 105.0, wgLat - 35.0);

double dLon = calLon(wgLon - 105.0, wgLat - 35.0);

double radLat = wgLat / 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);

return new double[] { dLat, dLon };

}

private static boolean isOutOfChina(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 calLat(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 calLon(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;

}

}

java gps 纠偏_【实测可用】GPS纠偏算法-Java版相关推荐

  1. Java并发插件_五分钟,轻松掌握Java并发编程!

    Java作为最流行的编程语言之一,随着 Java 8的到来,越来越多的人开始学习,并深入研究!下面将介绍 Java并发编程,让开发者在最短的时间里掌握并发编程. 1. 并发 1.1. 什么是并发? 并 ...

  2. java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...

    Java视频教程名称:java面对对象编程-俄罗斯方块视频教程  俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T  e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...

  3. java 类型转换 效率_盘点16个有用的Java工具类,显著提升工作效率!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  4. java 底层运行_从表面到底层丨Java和JVM的运行原理,现在带给你

    Java,编程语言,被创造于90年代初,在经历了这么多年的风风雨雨,Java已经成长为世界第一的编程语言,根据往期以及目前的数据来看,Java的使用频率为全球第一,即使偶尔会有第二第三的情况,但是这依 ...

  5. java xslt 数据转换_如何将xslt结果转换为Java对象?

    我有一个 XML文件: Empire Burlesque Bob Dylan USA Columbia 10.90 1985 而这个XSL文件: 现在我想将结果转换为Java类. Java的: @Xm ...

  6. eclipse java工程目录_转载:Eclipse下的java工程目录

    对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在Eclipse编写Java程序中,出现频率最高的错误很可能就是路径问题. 这些问题原因其实都是一个,就是关 ...

  7. ubuntu java classpath 设置_在Ubuntu中正确设置java classpath和java_home

    我有错误 Exception in thread"main" java.lang.NoClassDefFoundError: 当我尝试在Ubuntu上运行编译类时.我使用的是一个非 ...

  8. java string范围_字符串索引超出范围? (Java,子字符串循环...

    我正在为COSC课程制作的该程序编译不正确,但我不断收到错误消息: 线程"主"中的异常java.lang.StringIndexOutOfBoundsException:字符串索引 ...

  9. java自学难点_分享在达内教育培训Java的感受

    刚在达内教育培训完java,给即将来培训以及已经在培的学员分享下我的感受 回想一下在达内教育学习Java时的情景,我仍然兴奋不已,其实在刚接触Java时,自己确实有点晕,但经过一段时间学习,逐渐走出了 ...

  10. 学会java要多久_多长时间可以学会Java?

    爱尚速成手册了解一下,时下流行速成,在这个it告诉发展的时代,程序员虽然被人吐槽了无数次,但是依然是个的饭碗,它高薪,工作环境好,市场环境好,就业率高.所以好多人咨询爱尚实训的小编,多久能学会Java ...

最新文章

  1. Java学习笔记二十:Java中的内部类
  2. C语言——指针与结构体 内存的动态分配
  3. C# - 为引用类型重定义相等性 - 继承相关
  4. 深入理解Linux守护进程
  5. JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
  6. android onSaveInstance方法项目中的实践
  7. Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中...
  8. Git 代码防丢指南,再也不怕丢失代码了!
  9. Tip: JSP开发模式
  10. 思维导图iMindMap如何制定时间计划
  11. MySQL数据库应用与实践教程答案_MySQL数据库应用与实践教程(21世纪高等学校计算机教育实用规划教材)...
  12. #paypay付款测试#
  13. Kubernetes_MindMap
  14. BIOS设置中功能的翻译及介绍
  15. 修复iPhone系统白苹果问题
  16. Absible#Ansible-Playbook的任务控制
  17. 未明学院:产品经理到底在职场中过得怎么样?
  18. 精品展示案例(使用jQuery)
  19. HTML+CSS实战(一)——导航条菜单的制作
  20. win7和win10双系统安装教程

热门文章

  1. php是哪个快递,php快递查询API类(支持各种快递的查询)
  2. springboot基础灵魂拷问
  3. WeWork中国实现全面本土化运营;巴黎欧莱雅沙龙专属全球首家旗舰沙龙开业 | 美通企业日报...
  4. python gamma函数_Python 不完全伽马函数
  5. TeamViewer正版许可证到底多少钱?
  6. 使用stress进行压力测试
  7. 跟着团子学SAP CS:SAP CS(客户服务)模块概览
  8. 简单粗暴使用Qt图表Qt Chart之barchart
  9. java中implement_java中 implement和extends的作用和区别详细解释
  10. ThoughtWorks HomeWork