美文网首页Android开发经验谈Android技术知识
经纬度与高斯平面坐标正反算java代码

经纬度与高斯平面坐标正反算java代码

作者: 胡氏一人 | 来源:发表于2019-09-19 23:09 被阅读0次

    最新随记App算是正式上线了,这个App里面涉及了很多Android

    方面的知识,我个人感觉,当你一个人把一个App实现出来,正对重量级的原生App,如果做的牛叉的话,可以覆盖Android开发的绝大部分知识,达到中级研发工程师的水平基本不在话下。

    一不小心说多了,直奔主题吧,如何经纬度转高斯平面坐标,以前学校写的C#的代码,现在用Java代码实现了,如果有需要的同学,请拿走,不谢!如果你觉得好用,请打赏10个糖果,谢谢老板!

    package com.zjasm.mapbuild.utils;

    import com.esri.core.geometry.Point;

    /**

    * Created by zjasm on 2019/3/30.

    * 自定义高斯投影变换,CGCS2000坐标系为基准

    */

    public class GrussCoordinateUitl {

    public static final double a =6378137.0;

        public static final double b =6356752.31414;

        public static final double f =1.0 /298.257222101;

        public static final double e =0.0818191910428;

        public static final double e_2 =0.00669438002290;

        public static final double e1 =0.0820944381519;

        public static final double e1_2 =0.00673949677559;

        public static final double p =180 *3600.0 / Math.PI;

        /**

    * 高斯正算,获取平面坐标

    *

        * @param point    待转换的点

        * @param centerLng 中央经线

        * @param dh 代号

        * @return 返回转换后的XY点

    */

        public static PointgetXYPoint(Point point, double centerLng,int dh) {

    double B = point.getY() /180.0 * Math.PI;

            double l = (point.getX() - centerLng) /180.0 * Math.PI;

            double cosB = Math.cos(B);

            double tanB = Math.tan(B);

            double p8 = Math.pow((e1 * cosB), 2);

            double S8 =a *a /b / Math.sqrt(1 + p8);

            double Q8 = l * cosB;

            double O8 = Math.pow(tanB, 2);

            double P8 = Math.pow((e1 * cosB), 2);

            double X1 =a * (

    (1 - Math.pow(e, 2) /4.0 - (3 * Math.pow(e, 4)) /64.0 - (5 * Math.pow(e, 6) /256.0)) * B

    - ((3 * Math.pow(e, 2)) /8.0 + (3 * Math.pow(e, 4)) /32.0 + (45 * Math.pow(e, 6)) /1024.0) * Math.sin(2 * B)

    + ((15 * Math.pow(e, 4)) /256.0 + (45 * Math.pow(e, 6)) /1024.0) * Math.sin(4 * B)

    - (35 * Math.pow(e, 6)) * Math.sin(6 * B) /3072.0

            );

            double x = (X1 + S8 * tanB * (0.5 * Math.pow(Q8, 2) + (5 - O8 +9 * p8 +4 * Math.pow(p8, 2)) * Math.pow(Q8, 4) /24.0) + (61 -58 * O8 + Math.pow(O8, 2) +270 * p8 -330 * O8 * p8) * Math.pow(Q8, 6) /720);

            double y =500000 +1 * S8 * (Q8 + (1 - O8 + P8) * Math.pow(Q8, 3) /6 + (5 -18 * O8 + Math.pow(O8, 2) +14 * P8 -58 * O8 * P8) * Math.pow(Q8, 5) /120);

            System.out.println("**********x:"+x);

            System.out.println("**********y:"+y);

            return new Point(y,x);

        }

    /**

    * 高斯反算,获取经纬度坐标

    *

        * @param point    待转换的点

        * @param centerLng 中央经线

        * @return 返回转换后的经纬度点

    */

        public static PointgetLBPoint(Point point, double centerLng) {

    double x=point.getY();

            double y=point.getX();

            double R8=(1-b/a)/(1+b/a);

            double S8=Math.floor(x);

            double T8=S8/(a*(1-Math.pow(e,2)/4-3*Math.pow(e,4)/64-5*Math.pow(e,6)/256.0));

            double U8=T8+(3*R8/2-27*Math.pow(R8, 3)/32)*Math.sin(2*T8)+(21*Math.pow(R8, 2)/16-55*Math.pow(R8, 4)/32)*Math.sin(4*T8)+151*Math.pow(R8, 3)/96*Math.sin(6*T8);

            double V8=Math.pow(e1* Math.cos(U8),2);

            double W8=a*(1-e_2)/Math.pow(1-Math.pow(e*Math.sin(U8),2),2.5);

            double X8=a*a/b/Math.sqrt(1+V8);

            double Y8=Math.pow(Math.tan(U8),2);

            double Z8=(y-500000-Math.floor(y/1000000)*1000000)/(1*X8);

            double lat=(U8-X8*Math.tan(U8)*(Math.pow(Z8,2)/2-(5+3*Y8+V8-9*Y8*V8)*Math.pow(Z8,4)/24+(61+90*Y8+45*Math.pow(Y8,2))*Math.pow(Z8,6)/720)/W8)*360/2/Math.PI;

            double lng=centerLng+((Z8-(1+2*Y8+V8)*Math.pow(Z8,3)/6+(5+28*Y8+6*V8+8*Y8*V8+24*Math.pow(Y8,2))*Math.pow(Z8,5)/120)/Math.cos(U8))*180/Math.PI;

            System.out.println("**********B:"+lat);

            System.out.println("**********L:"+lng);

            return new Point(lng,lat);

        }

    }

    如果你觉得好用,请打赏10个糖果,谢谢老板!并点个赞。

    相关文章

      网友评论

        本文标题:经纬度与高斯平面坐标正反算java代码

        本文链接:https://www.haomeiwen.com/subject/xplductx.html