Java各大GPS坐標系互轉算法(保證好用)

不好用來捶我,好用的話點個贊鼓勵一下~

/*** 坐標轉換器*/
public class CoordinateConverter {private static final double x_PI = 3.14159265358979324 * 3000.0 / 180.0;private static final double PI = 3.1415926535897932384626;private static final double a = 6378245.0;private static final double ee = 0.00669342162296594323;/*** 百度->高德/谷歌* @param bd_lng* @param bd_lat* @return*/public static double[] bd09togcj02(double bd_lng, double bd_lat) {bd_lng = +bd_lng;bd_lat = +bd_lat;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) - 0.000003 * Math.cos(x * x_PI);double gg_lng = z * Math.cos(theta);double gg_lat = z * Math.sin(theta);return new double[]{gg_lng, gg_lat};}/*** 高德/谷歌 -> 百度* @param lng* @param lat* @return*/public static double[] gcj02tobd09(double lng, double lat) {lat = +lat;lng = +lng;double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);double bd_lng = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;return new double[]{bd_lng, bd_lat};}/*** 84 —> 高德/谷歌* @param lng* @param lat* @return*/public static double[] wgs84togcj02(double lng, double lat) {lat = +lat;lng = +lng;if (out_of_china(lng, lat)) {return new double[]{lng, lat};} else {double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);double mglat = lat + dlat;double mglng = lng + dlng;return new double[]{mglng, mglat};}}/*** 高德/谷歌 -> 84* @param lng* @param lat* @return*/public static double[] gcj02towgs84(double lng, double lat) {lat = +lat;lng = +lng;if (out_of_china(lng, lat)) {return new double[]{lng, lat};} else {double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);double mglat = lat + dlat;double mglng = lng + dlng;return new double[]{lng * 2 - mglng, lat * 2 - mglat};}}private static double transformlat(double lng, double lat) {lat = +lat;lng = +lng;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;}private static double transformlng(double lng, double lat) {lat = +lat;lng = +lng;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;}private static boolean out_of_china(double lng, double lat) {lat = +lat;lng = +lng;// Latitude: 3.86~53.55, Longitude: 73.66~135.05return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);}public static void main(String[] args) {// 測試double[] doubles = gcj02tobd09(120.326902, 36.07687);for (double aDouble : doubles) {System.out.println(aDouble);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12766.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12766.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA不能創建新項目和新模塊

問題&#xff1a; IDEA不管是創建新項目還是新模塊都創建不成功&#xff0c;會報如下圖錯誤 解決方案&#xff1a; 在電腦設置里搜索 “防火墻和網絡保護” &#xff0c;打開如下圖所示 找到你所安裝的IDEA&#xff0c;更改設置&#xff0c;選中IDEA 最后&#xff0c;確定&am…

香港優才計劃避坑指南及過來人建議,這6種行為會毀了你的香港身份!

香港優才計劃是一項香港人才引進政策&#xff0c;如果你想真正落戶香港&#xff0c;那么就需要了解清楚香港優才從申請到永居的整個流程&#xff0c;并且要注意維護好香港身份。 如果操作不當&#xff0c;可能會中斷你來之不易的香港身份。 本文總結了香港優才整個流程中&…

nmap端口掃描工具——Win10

Nmap安裝流程&#xff1a; Nmap官網鏈接&#xff1a;Download the Free Nmap Security Scanner for Linux/Mac/Windows Nmap參考文檔鏈接&#xff1a;https://nmap.org/book/toc.html Nmap使用流程&#xff1a; Nmap軟件主頁面&#xff1a; 中文版&#xff1a; nmap -T4 -…

脈沖神經網絡(Spiking Neural Networks,SNNs)介紹

脈沖神經網絡&#xff08;Spiking Neural Networks&#xff0c;SNNs&#xff09;是仿生神經網絡的一種類型&#xff0c;它們模仿了生物神經元在大腦中傳遞信息的方式。與傳統的人工神經網絡&#xff08;Artificial Neural Networks&#xff0c;ANNs&#xff09;不同&#xff0c…

Prosys OPC UA Simulation Server工程文件備份方法

Prosys OPC UA Simulation Server是一款免費的OPC UA服務器仿真軟件&#xff0c;具體的使用和下載參考官網&#xff1a; Prosys OPC - OPC UA Simulation Server Downloads 他的免費版本不提供工程文件的備份、導入導出功能&#xff0c;每次退出時保存。如果需要工程備份&a…

IPsec VPN簡介

什么是IPsec&#xff1f; IPsec&#xff08;Internet Protocol Security&#xff09;是為IP網絡提供安全性的協議和服務的集合&#xff0c;它是VPN&#xff08;Virtual Private Network&#xff0c;虛擬專用網&#xff09;中常用的一種技術。其實就是一種協議簇&#xff08;類…

揭秘SmartEDA魅力:為何眾多學校青睞這款電路仿真軟件?

在當今數字化、信息化的教育時代&#xff0c;電子電路仿真軟件已成為電子學教學不可或缺的重要工具。其中&#xff0c;SmartEDA電路仿真軟件以其強大的功能、用戶友好的界面以及豐富的教育資源&#xff0c;贏得了眾多學校的青睞。那么&#xff0c;究竟是什么原因讓SmartEDA成為…

如何在阿里云申請免費SSL證書(三個月有效)

SSL證書主要用于建立Web服務器和客戶端間可信的HTTPS協議加密鏈接&#xff0c;以防止數據在傳輸過程中被篡改&#xff0c;避免信息泄露。阿里云提供了多種品牌和類型的SSL證書&#xff0c;以滿足不同用戶的需求。您可以根據自己的預算、域名類型以及網站類型&#xff0c;選擇購…

軟件工程期末復習(7)需求過程

需求分析 需求過程 什么是需求過程&#xff1f; 需求過程是用來導出、確認和維護系統需求文檔的一組結構化活動。通常&#xff0c;一個良好的需求過程應包括下列活動&#xff1a; 需求提取需求分析和協商需求確認 需求提取 需求提取是通過與客戶、系統用戶和其他與系統開發相…

Cannot read properties of undefined (reading ‘init‘)報錯

出現這個報錯是印象項目沒有引echarts包 npm i echarts 下包 然后在main.js中引入 import echarts from echarts Vue.prototype.$echarts echarts 如果還不行 import * as echarts from echarts; 更改一下引入方式 ok了

vue3 + ts中,element-plus組件通過ref引用組件內方法,顯示提示

在vue3 ts 項目中&#xff0c;我們通過ref引用element-plus組件內部方法時&#xff0c;編輯器沒有提示信息&#xff0c;通常我們都是如下寫法 這里想進行一下表單校驗&#xff0c;需要引用el-form組件中的validate方法&#xff0c;從這里可以看出是沒有給相應的提示信息的。這…

JavaScript對象的聲明

JS聲明對象的語法 1 通過new Object()直接創建對象2 通過 { }形式創建對象 1 通過new Object()直接創建對象 代碼 var person new Object(); // 給對象添加屬性并賦值 person.name"張小明"; person.age10; person.foods["蘋果","橘子","香…

基于多傳感器的智能小區安防系統設計與實現-設計說明書

設計摘要&#xff1a; 本設計是基于多傳感器的智能小區安防系統的設計與實現。系統主要包括煙霧和溫度傳感器、人體紅外傳感器、OLED顯示屏、WiFi模塊和按鍵控制等組件。通過這些組件的協作&#xff0c;實現了火災檢測、人員監測、數據顯示和遠程控制等功能。 首先&#xff0…

Git—常用命令

官方 Git - Book (git-scm.com) 常用命令 命令作用git config --global user.name 用戶名設置用戶作者git config --global user.email 郵箱設置用戶郵箱 git init初始化本地倉庫git status查看本地倉庫狀態 git add 文件名 添加到暫存區git commit -m "提交日志…

Unity使用sherpa-onnx實現離線語音合成

sherpa-onnx https://github.com/k2-fsa/sherpa-onnx 相關dll和lib庫拷進Unity&#xff0c;官方示例代碼稍作修改 using SherpaOnnx; using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine;public class TTS : MonoBehaviour {public st…

【C++】vector的底層原理講解及其實現

目錄 一、認識vector底層結構 二、初始化vector的函數 構造函數拷貝構造賦值構造initializer_list構造迭代器區間構造 三、迭代器 四、數據的訪問 五、容量相關的函數 六、關于數據的增刪查改操作 一、認識vector底層結構 STL庫中實現vector其實是用三個指針來完成的&#x…

Promise 還能這樣理解呀!

目錄&#xff1a; 1、Promise是什么 2、Promise三種狀態 3、Promise如何使用 4、Promise作用

一種快速提升文件傳輸速度的方法

在面對網絡條件不理想時&#xff0c;進行文件傳輸往往會導致傳輸速率的顯著下降。為了克服這一難題&#xff0c;鐳速軟件特別引入了一系列創新的設置選項&#xff0c;旨在顯著提升文件傳輸速率。通過這些優化措施&#xff0c;用戶即使在網絡不佳的情況下&#xff0c;也能享受到…

機器人工具箱學習(三)

一、動力學方程 機器人的動力學公式描述如下&#xff1a; 式中&#xff0c; τ \boldsymbol{\tau} τ表示關節驅動力矩矢量&#xff1b; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙?,q?分別為廣義的關節位置、速度和加速…

uniapp如何打包預約上門按摩APP

uniapp如何打包預約上門按摩APP&#xff1f; 開發工具&#xff1a;HBuilderX 一、創建移動應用 1、 點擊此處微信開放平臺 2、點擊【管理中心 - 移動應用 - 創建移動應用】填寫資料后等待審核 app運行流程圖 簽名如何獲取&#xff1a; 1&#xff09;先把打包好的app安裝在手…