1. 程式人生 > >地球座標系轉換到火星座標系演算法分析

地球座標系轉換到火星座標系演算法分析

分析一下這段程式碼,在能明白的地方加點註釋,諸位將就著看吧

//
// Copyright (C) 1000 - 9999 Somebody Anonymous
// NO WARRANTY OR GUARANTEE
//

using System;

namespace Navi
{
    class EvilTransform
    {
        const double pi = 3.14159265358979324;

        //
        // Krasovsky 1940
        //
        // a = 6378245.0, 1/f = 298.3
        // b = a * (1 - f)
        // ee = (a^2 - b^2) / a^2;
        const double a = 6378245.0;//參考橢球體半長徑
        const double ee = 0.00669342162296594323;//第一偏心率平方

        //
        // World Geodetic System ==> Mars Geodetic System
        public static void transform(double wgLat, double wgLon, out double mgLat, out double mgLon)
        {
            if (outOfChina(wgLat, wgLon))
            {//判斷需要轉換的座標是否在中國境內,只有我大天朝使用此種加密方法
                mgLat = wgLat;
                mgLon = wgLon;
                return;
            }
            double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);//計算偏移量
            double dLon = transformLon(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);
            mgLat = wgLat + dLat;
            mgLon = wgLon + dLon;
        }

        static bool outOfChina(double lat, double lon)
        {
            if (lon < 72.004 || lon > 137.8347)
                return true;
            if (lat < 0.8293 || lat > 55.8271)
                return true;
            return false;
        }

        static double transformLat(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;
        }

        static double transformLon(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;
        }
    }
}

這是第一偏心率的解釋(來自百度知道)


相關推薦

各種經緯度座標系轉換-百度座標系火星座標系、國際座標系

(文章程式碼參考網上 測試沒什麼問題, 彙總整理希望對大家有幫助-dou ) WGS84:國際座標系,為一種大地座標系,也是目前廣泛使用的GPS全球衛星定位系統使用的座標系。 GCJ02:火星座標系,是由中國國家測繪局制訂的地理資訊系統的座標系統。由WGS84座標系經加密後的座標系。 BD

WGS84地球座標系火星座標系的Python程式碼實現

WGS84地球座標系轉火星座標系的Python程式碼實現 轉換演算法: from __future__ import division from math import pi, sqrt, sin, cos # a python binding of https://on4wp7.

java版座標系轉換(火星座標、GPS座標、百度座標)

public class Gps {public double wgLat;public double wgLon;public Gps(double wgLat, double wgLon) {setWgLat(wgLat);setWgLon(wgLon);}public double getWg

地球座標系轉換火星座標系演算法分析

分析一下這段程式碼,在能明白的地方加點註釋,諸位將就著看吧 // // Copyright (C) 1000 - 9999 Somebody Anonymous // NO WARRANTY OR GUARANTEE // using System; namespa

地球座標系 (WGS-84) 到火星座標系 (GCJ-02) 的轉換演算法

原文 WGS-84 到 GCJ-02 的轉換(即 GPS 加偏)演算法是一個普通青年輕易無法接觸到的“公開”的祕密。這個演算法的程式碼在網際網路上是公開的,詳情請使用 Google 搜尋 "wgtochina_lb" 。 至於 GCJ-02 到 WGS-84 的轉換

QT:火星座標系 (GCJ-02) 與百度座標系 (BD-09ll) 簡介及轉換演算法

首先向轉換演算法的作者 @coolypf 致敬!轉換演算法文章:http://blog.csdn.net/coolypf/article/details/8569813 1、美國GPS使用的是WGS84座標系統,以經緯度的形式來表示地球平面上的某一個位置。但在我國,出於國家安全考慮,國內所有導

火星座標系 (GCJ-02) 與百度座標系 (BD-09ll) 簡介及轉換演算法

首先向轉換演算法的作者 @coolypf 致敬!轉換演算法文章:http://blog.csdn.net/coolypf/article/details/8569813 1、美國GPS使用的是WG

iOS開發中的火星座標系及各種座標系轉換演算法

原文地址:http://m.oschina.net/blog/619183?ref=myread 其原理是這樣的:保密局開發了一個系統,能將實際的座標轉換成虛擬的座標。所有在中國銷售的數字地圖必須使用這個系統進行座標轉換之後方可上市。這是生產環節,這種電子地圖被稱為

Android感測器 裝置座標系到世界座標系轉換 分析以及應用

首先分別介紹兩種座標系的不同之處: 世界座標系: Y軸:和地球表面正切,並且指向磁北極 Z軸:和地球表面垂直,然後指向地球的中心 X軸:和Y,Z垂直,並且幾乎是直接指向磁東 裝置座標系: 這個很好理解,垂直手機螢幕那一面向上為Z軸,向右為

感測器座標系與車身座標系轉換關係

文章目錄 1座標系的定義 1.1車身座標系定義如下: 1.2感測器座標系定義如下: 2座標系旋轉 3座標系平移 1座標系的定義 1.1車身座標系定義如下: 1.

arcgis匯入Excel經緯度座標並轉換xian座標系

關鍵:首先匯入的Excel資料為經緯度座標,所以僅設定空間座標系統WGS1984(暫不設定投影座標系)。然後用toolbox的project座標轉換,加上投影座標系,空間座標系轉換。 1.如果Excel為度分秒用Excel公式轉換成數值形式 公式:=LEFT(A2,FIND(“°”,A2

影象的座標系轉換(1)

隨記1: 1.攝像機內參數:成像特點,成像規則,內參數標定(幾何特性和內部光學特性) 2.座標型別 : 世界座標(又稱為大地座標,通常表示三維資訊,XYZ座標系),攝像機座標系,象平面座標系                        攝像機座標系(通過環境的來設定的

地圖座標系轉換

import com.cxsz.ibosspro.common.vo.Point; /** * @author cxsz-hp16 * @Title: LocationConverterUtils * @ProjectName ibosspro * @Description: 地圖

一張圖看懂“火星座標系

不同座標系的座標在地圖上的位置是否偏移與使用的地圖框架(高德、百度、OpenLayes、Leaflet等)無關,而與所使用的底圖供應商有關。 火星座標系,也叫國測局座標系(GCJ02),是由中國國家測繪局制訂的地理資訊系統的座標系統。國內出版的各種地圖系統(包括

ArcGIS中利用ArcMap將地理座標系轉換成投影座標系(從WKID=4326到WKID=102100)

           對於非地理專業的開發人員,對與這些生澀的概念,我們不一定都要了解,但是我們要理解,凡是以經緯度為單位的都是地理座標系,因為它歸根結底是一個橢球體,只不過各個國家為了反映該國家所在區

CGCS2000座標系與其他座標系間的差異和轉換方法

1954北京座標系和1980西安座標系是以天文大地網等經典測量技術為基礎的區域性座標系。­ CGCS2000是以地球質量中心為原點的地心大地座標系。地心大地座標系可以滿足大地測量、地球物理、天文、導航和航天應用以及經濟、社會發展的廣泛需求。­ 其基本原則是:­ 座標系儘量對準ITRF(國際地球參考架

openlayer3 座標系轉換

'EPSG:4326'-經緯度座標-WGS84 'EPSG:3857'- xy座標-web墨卡託 ol3預設的座標系為3857,即在建立ol.map的時候,若不指定projection,則預設為EPSG:3857 轉換方法如下: var m_center=[116.35,39.9];//

Eigen::區域性座標系和base座標系轉換

"越有故事的人越沉靜簡單,越膚淺單薄的人越浮躁不安!"     無論是做SLAM還是感測器標定,離不開的是座標之間的轉換關係 Eigen 一個開源的C++矩陣運算庫 perfect~   言歸正傳: 使用Eigen庫進行空間座標的轉換。

主流地圖 座標系轉換,百度、騰訊、高德等

在我國,為了國家安全,電子地圖不可以使用地球座標系WGS84,必須經過偏轉。面前主流的幾款地圖都有其對應的座標系。 例如 高德、騰訊、圖靈、阿里地圖等都是 GCJ-02座標系(也稱火星座標系) 而百度則使用BD-09座標系。 那麼這3個常用座標系直接如何轉換呢。 參照這個

曲線座標系與直角座標系轉換(二)——基礎:三次樣條插值原理(cubic spline)

一、引入 上一篇提到插值多項式,幾次函式就稱為幾次樣條函式如, 二次樣條函式為:f(x) = a*x^2 + b*x + c 三次樣條函式為:f(x) = a*x^3 + b^x^2 + c*x +d x=[1,3,5,7,9]; y=[2,4,6,8,10];有5個節點,4個區