高斯坐標反算坐標轉經緯度


最近做項目的時候,有一塊需求是在地圖上畫圖,涉及到經緯度。但是我們拿到的數據是北京54坐標,不是經緯度,輾轉求方法不得,就自己在網上搜索算法並加以改造,實驗得出在谷歌衛星地圖上很准確,但是在百度地圖、高德地圖/騰訊地圖會有偏差,估計也是國家保護的問題吧。下面是Java方法

 1     public static void  gsjs(double X ,double Y){
 2         double x,y,L0 = 0,B,L;
 3         x = X;
 4         y = Y;
 5         double p=206264.80625;
 6         for (int i = 1; Y/i >=10; i = i * 10)//對Y坐標處理並求出中央子午線經度
 7         {
 8             y = Y - (int)(Y / i) * i-500000;
 9             L0 =117;
10         }        
11         //按6°帶克氏橢球反算
12         double bt = x / 6367558.4969*p;
13         double BT = x / 6367558.4969;
14         double c3=Math.cos(BT)*Math.cos(BT);
15         double c4=Math.sin(BT)*Math.cos(BT);
16         double Bf=(bt+(50221746+(293622+(2350+22*c3)*c3)*c3)*c4*Math.pow(10,-10)*p)/p;
17         double c5=Math.pow(Math.cos(Bf),2);
18         double c6=Math.sin(Bf)*Math.cos(Bf);
19         double Nf=6399698.902-(21562.267-(108.973-0.612*c5)*c5)*c5;
20         double Z=y/(Nf*Math.cos(Bf));
21         double b2 = (0.5 + 0.003369 * c5) * c6;
22         double b3 = 0.333333 - (0.166667 - 0.001123 * c5) * c5;
23         double b4 = 0.25 + (0.16161 + 0.00562 * c5) * c5;
24         double b5=0.2-(0.1667-0.0088*c5)*c5;
25         double z2=Math.pow(Z,2);
26         B = (Bf*p - (1 - (b4 - 0.12 *z2) * z2) * z2 * b2 * p)/3600.0;
27         L = L0+((1 - (b3 - b5 * z2) * z2) * Z * p)/3600.0;
28         System.out.println("緯度:"+B+"    經度:"+L+"    中央子午線:"+L0);
29     }

在這里中央子午線是固定死的,為117度,因為業務范圍就是這個地區,不會超出,后期有拓展可以再次修改,改成計算模式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM