日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不同地图坐标系的坐标转换

發布時間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不同地图坐标系的坐标转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前主要有哪些坐標系:

大地坐標系統(WGS-84):用來表述地球上點的位置的一種地區坐標系統,主要用于國外地圖。

火星坐標系(GCJ-02):對真實坐標系統進行人為的加偏處理,如大多數國內地圖:高德地圖、騰訊地圖。

百度坐標系(BD-09):對火星坐標系再次進行加密,如:百度地圖。

?

坐標轉換

一、WGS-84轉GCJ-02

// WGS-84轉GCJ-02 transformlat: function (lng, lat) {let PI = 3.1415926535897932384626;let 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},transformlng: function (lng, lat) {let PI = 3.1415926535897932384626;let 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},wgsToGcj: function (lng, lat) {let PI = 3.1415926535897932384626;let a = 6378245.0;let ee = 0.00669342162296594323;let dlat = this.transformlat(lng - 105.0, lat - 35.0);let dlng = this.transformlng(lng - 105.0, lat - 35.0);let radlat = lat / 180.0 * PI;let magic = Math.sin(radlat);magic = 1 - ee * magic * magic;let sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);let mglat = lat + dlat;let mglng = lng + dlng;return {longitude: mglng,latitude: mglat}},

二、GCJ-02轉WGS-84

// GCJ-02轉WGS-84 transformlat: function (lng, lat) {let PI = 3.1415926535897932384626;let 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},transformlng: function (lng, lat) {let PI = 3.1415926535897932384626;let 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},gcjToWgs: function (lng, lat) {let PI = 3.1415926535897932384626;let a = 6378245.0;let ee = 0.00669342162296594323;let dlat = transformlat(lng - 105.0, lat - 35.0);let dlng = transformlng(lng - 105.0, lat - 35.0);let radlat = lat / 180.0 * PI;let magic = Math.sin(radlat);magic = 1 - ee * magic * magic;let sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);let mglat = lat + dlat;let mglng = lng + dlng;return {longitude: lng * 2 - mglng,latitude: lat * 2 - mglat}},

三、GCJ-02轉BD-09

//火星轉百度坐標 function bd_encrypt(lng, lat) {var X_PI = Math.PI * 3000.0 / 180.0;var x = lng, y = lat;var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * X_PI);var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * X_PI);var bd_lon = z * Math.cos(theta) + 0.0065;var bd_lat = z * Math.sin(theta) + 0.006;return {longitude: bd_lon,latitude: bd_lat }; }

四、BD-09轉GCJ-02

//百度轉火星坐標 function bd_decrypt(lng, lat) {var X_PI = Math.PI * 3000.0 / 180.0;var x = lng- 0.0065;var y = lat- 0.006;var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);var gg_lon = z * Math.cos(theta);var gg_lat = z * Math.sin(theta);return {longitude: gg_lon,latitude: gg_lat} }

在國外則不做偏移處理

// 判斷是否在國內,在國外則不做偏移 function out_of_china(lng, lat) {return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false); }

完!

?

總結

以上是生活随笔為你收集整理的不同地图坐标系的坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。