首页 > 编程语言 >Java代码实现WGS84坐标转国测局坐标

Java代码实现WGS84坐标转国测局坐标

时间:2023-09-08 12:37:45浏览次数:31  
标签:测局 WGS84 double ret 2.0 坐标 pi sin Math

public class GPSToGCJ {

    private static double pi = 3.14159265358979324;
    private static double a = 6378245.0;
    private static double ee = 0.00669342162296594323;


    private static boolean 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;
    }


    private 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;
    }


    private 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;
    }

    /**
     * 地球坐标转换为火星坐标 World Geodetic System ==> Mars Geodetic System
     *
     * @param wgLat 地球坐标
     * @param wgLon mglat,mglon 火星坐标
     */
    public static Double[] transform2Mars(double wgLat, double wgLon) {
        Double[] gps = new Double[2];
        double mgLat, mgLon;
        if (outOfChina(wgLat, wgLon)) {
            mgLat = wgLat;
            mgLon = wgLon;
            gps[0] = mgLat;
            gps[1] = mgLon;
            return gps;
        }
        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;
        gps[0] = mgLat;
        gps[1] = mgLon;
        return gps;
    }
}


标签:测局,WGS84,double,ret,2.0,坐标,pi,sin,Math
From: https://blog.51cto.com/u_16232375/7408260

相关文章

  • 【Python&GIS】矢量数据投影转换(坐标转换)
    ​    之前跟大家分享过面矢量数据投影转换和点矢量数据投影转换,但博主在日常工作的过程中发现之前分享的面矢量数据投影转换有时候会出现错误,或者转换后的效果不好。再一次偶然的过程中发现了新的坐标转换(投影转换)函数,所以今天和大家分享一下,大家在进行坐标转换时可以......
  • Qt中QGraphics类坐标映射关系详解
    1、Item(图元)坐标:属于局部坐标,通常以图元中心为原点(中心对称),非中心对称类,比如dialog类,一般以左上角为原点,正方向x朝右,y朝下。2、setPos的坐标是父类坐标系的坐标,一般对于item位于scene中的应用场景。3、scene(场景)坐标:属于逻辑坐标logicalcoordinates(与QPainter相同),以场......
  • QGraphicsScene和QGraphicsView坐标系统
     GraphicsView中有三个坐标系统,即场景坐标、视图坐标、图形项坐标。场景坐标场景坐标等价于QPainter的逻辑坐标,一般以场景中心为原点;视图坐标与设备坐标相同,是物理坐标,默认为左上角为原点;图形项的坐标是局部逻辑坐标,一般以图形项的中心为原点。一个图形项的位置是其中心点在......
  • Qt 图形视图框架<三>——<坐标系统>
    Qt图形视图框架<三>——<坐标系统> 一基础知识 图形视图框架是基于笛卡尔坐标系统的,一个图形项在场景中的位置和几何形状由x坐标和y坐标来表示。当使用一个没有变换的视图来观察场景时,场景中的一个单元代表屏幕上的一个像素。图形视图框架的三个坐标系分别是视图......
  • 【230908-3】同一直角坐标系中,分别作函数y=1/a^x,y=loga_(x-1/2)(a>0且a≠1)的图像如
    ......
  • ElasticSearch系列——查询、Python使用、Django/Flask集成、集群搭建,数据分片、位置
    @目录Elasticsearch之-查询一基本查询1.1match查询1.2term查询1.3terms查询1.4控制查询的返回数量(分页)1.5match_all查询1.6match_phrase查询1.7multi_match1.8指定返回的字段1.9sort结果排序1.10range范围查询1.11wildcard查询二组合查询2.1bool查询2.2简单过滤......
  • 视觉SLAM十四讲 3.6.2实际的坐标转换的例子
    在这一讲中,作者没有给出详细的过程,作为初学者还是有点懵。这道题是有两种解法的四元数解法欧拉矩阵解法四元数解法假设一个目标点\(p\)在世界坐标系下的坐标是\[P_W\]利用四元数表示旋转,两个小萝卜坐标系下\(p\)点坐标有如下公式:\[p_1=q_1*P_w+t_1\\p_2=q......
  • 小谈Qt的坐标系系统 - 3个坐标系,2个变换
    小谈Qt的坐标系系统Qt中有三个坐标系设备坐标系窗口坐标系逻辑坐标系设备坐标系:即Device坐标系。也是物理坐标系。即真实的的物理坐标系。逻辑坐标系:即用户坐标系。也就是说日常大家使用Qt的时候的坐标系。窗口坐标系:这个坐标系是QPainter设置setWindow以后的一个坐......
  • QT坐标系转换(将QPainter左上角为原点的坐标系转换为正常坐标系)
    没有复杂的变换,简单转化窗口坐标系,即可按我们正常熟知的坐标系进行绘图QPainter坐标系以左上角为原点,如下图 在这样的坐标系下绘图,位置这是倒过来的QPainterm_pPainter(this);   m_pPainter.setBrush(Qt::yellow);   m_pPainter.drawRect(0,0,50,50);   m......
  • sketchup 动态组件 旋转 失灵 -- 两个坐标轴不同
    sketchup动态组件旋转失灵 使用sketchup做了一个门,使用了旋转z轴功能,然后把组件门放入另一个组件中,结果只能开门,不能关门,反复重复开门动作反复常识查找谷歌了半天没有结果后来发现 原来时外组件的坐标轴和内组件的坐标轴不一致调整内外组件坐......