不同地图坐标系的坐标转换
生活随笔
收集整理的這篇文章主要介紹了
不同地图坐标系的坐标转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目前主要有哪些坐標系:
大地坐標系統(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); }完!
?
總結
以上是生活随笔為你收集整理的不同地图坐标系的坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue项目设置img标签的默认图片
- 下一篇: js获取图片宽高