java gps 纠偏_【实测可用】GPS纠偏算法-Java版
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版相关推荐
- Java并发插件_五分钟,轻松掌握Java并发编程!
Java作为最流行的编程语言之一,随着 Java 8的到来,越来越多的人开始学习,并深入研究!下面将介绍 Java并发编程,让开发者在最短的时间里掌握并发编程. 1. 并发 1.1. 什么是并发? 并 ...
- java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...
Java视频教程名称:java面对对象编程-俄罗斯方块视频教程 俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...
- java 类型转换 效率_盘点16个有用的Java工具类,显著提升工作效率!
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- java 底层运行_从表面到底层丨Java和JVM的运行原理,现在带给你
Java,编程语言,被创造于90年代初,在经历了这么多年的风风雨雨,Java已经成长为世界第一的编程语言,根据往期以及目前的数据来看,Java的使用频率为全球第一,即使偶尔会有第二第三的情况,但是这依 ...
- java xslt 数据转换_如何将xslt结果转换为Java对象?
我有一个 XML文件: Empire Burlesque Bob Dylan USA Columbia 10.90 1985 而这个XSL文件: 现在我想将结果转换为Java类. Java的: @Xm ...
- eclipse java工程目录_转载:Eclipse下的java工程目录
对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在Eclipse编写Java程序中,出现频率最高的错误很可能就是路径问题. 这些问题原因其实都是一个,就是关 ...
- ubuntu java classpath 设置_在Ubuntu中正确设置java classpath和java_home
我有错误 Exception in thread"main" java.lang.NoClassDefFoundError: 当我尝试在Ubuntu上运行编译类时.我使用的是一个非 ...
- java string范围_字符串索引超出范围? (Java,子字符串循环...
我正在为COSC课程制作的该程序编译不正确,但我不断收到错误消息: 线程"主"中的异常java.lang.StringIndexOutOfBoundsException:字符串索引 ...
- java自学难点_分享在达内教育培训Java的感受
刚在达内教育培训完java,给即将来培训以及已经在培的学员分享下我的感受 回想一下在达内教育学习Java时的情景,我仍然兴奋不已,其实在刚接触Java时,自己确实有点晕,但经过一段时间学习,逐渐走出了 ...
- 学会java要多久_多长时间可以学会Java?
爱尚速成手册了解一下,时下流行速成,在这个it告诉发展的时代,程序员虽然被人吐槽了无数次,但是依然是个的饭碗,它高薪,工作环境好,市场环境好,就业率高.所以好多人咨询爱尚实训的小编,多久能学会Java ...
最新文章
- Java学习笔记二十:Java中的内部类
- C语言——指针与结构体 内存的动态分配
- C# - 为引用类型重定义相等性 - 继承相关
- 深入理解Linux守护进程
- JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
- android onSaveInstance方法项目中的实践
- Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中...
- Git 代码防丢指南,再也不怕丢失代码了!
- Tip: JSP开发模式
- 思维导图iMindMap如何制定时间计划
- MySQL数据库应用与实践教程答案_MySQL数据库应用与实践教程(21世纪高等学校计算机教育实用规划教材)...
- #paypay付款测试#
- Kubernetes_MindMap
- BIOS设置中功能的翻译及介绍
- 修复iPhone系统白苹果问题
- Absible#Ansible-Playbook的任务控制
- 未明学院:产品经理到底在职场中过得怎么样?
- 精品展示案例(使用jQuery)
- HTML+CSS实战(一)——导航条菜单的制作
- win7和win10双系统安装教程
热门文章
- php是哪个快递,php快递查询API类(支持各种快递的查询)
- springboot基础灵魂拷问
- WeWork中国实现全面本土化运营;巴黎欧莱雅沙龙专属全球首家旗舰沙龙开业 | 美通企业日报...
- python gamma函数_Python 不完全伽马函数
- TeamViewer正版许可证到底多少钱?
- 使用stress进行压力测试
- 跟着团子学SAP CS:SAP CS(客户服务)模块概览
- 简单粗暴使用Qt图表Qt Chart之barchart
- java中implement_java中 implement和extends的作用和区别详细解释
- ThoughtWorks HomeWork