高斯坐标反算坐标转经纬度

最近做项目的时候,有一块需求是在地图上画图,涉及到经纬度。但是我们拿到的数据是北京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度,因为业务范围就是这个地区,不会超出,后期有拓展可以再次修改,改成计算模式。

转载于:https://www.cnblogs.com/godricgx/p/6678919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值