正算公式(将经纬度转化为坐标):

java代码(附有源代码和修改后的代码):

源代码:

/**     * 由经纬度反算成高斯投影坐标   *      * @param longitude     * @param latitude     * @return     */ public static double[] GaussToBLToGauss(  double longitude, double latitude) {    int ProjNo = 0;  int ZoneWide; // //带宽   double[] output = new double[2];    double longitude1, latitude1, longitude0, X0, Y0, xval, yval;    double a, f, e2, ee, NN, T, C, A, M, iPI;    iPI = 0.0174532925199433; // //3.1415926535898/180.0;    ZoneWide = 6; // //6度带宽   a = 6378245.0;    f = 1.0 / 298.3; // 54年北京坐标系参数   // //a=6378140.0; f=1/298.257; //80年西安坐标系参数   ProjNo = (int) (longitude / ZoneWide);     longitude0 = ProjNo * ZoneWide + ZoneWide / 2;     longitude0 = longitude0 * iPI;     longitude1 = longitude * iPI; // 经度转换为弧度   latitude1 = latitude * iPI; // 纬度转换为弧度   e2 = 2 * f - f * f;     ee = e2 * (1.0 - e2);     NN = a    / Math.sqrt(1.0 - e2 * Math.sin(latitude1)      * Math.sin(latitude1));     T = Math.tan(latitude1) * Math.tan(latitude1);     C = ee * Math.cos(latitude1) * Math.cos(latitude1);     A = (longitude1 - longitude0) * Math.cos(latitude1);     M = a    * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256)      * latitude1                     - (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2 * e2        / 1024) * Math.sin(2 * latitude1)                     + (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024)      * Math.sin(4 * latitude1)                - (35 * e2 * e2 * e2 / 3072)      * Math.sin(6 * latitude1));     // 因为是以赤道为Y轴的,与我们南北为Y轴是相反的,所以xy与高斯投影的标准xy正好相反;     xval = NN    * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72      * C - 58 * ee)                         * A * A * A * A * A / 120);     yval = M    + NN    * Math.tan(latitude1)    * (A * A / 2 + (5 - T + 9 * C + 4 * C * C)                    * A * A * A * A / 24 + (61      - 58 * T + T * T + 600 * C - 330 * ee)                         * A * A * A * A * A * A / 720);     X0 = 1000000L * (ProjNo + 1) + 500000L;     Y0 = 0;  xval = xval + X0;     yval = yval + Y0;     output[0] = xval;     output[1] = yval;     return output; }

java代码是网上找的, 原作者对该代码很有自信, 我根据与正算公式的比较, 发现了几个不同点, 对代码做了修改.

不同点1:ee不同

代码中的"ee = e2 * (1.0 - e2)",这对应了正算公式中的e'的平方, 代码中的f就是正算公式中的扁率α. 计算ee是否与e'的平方一致, e的平方=(a²-b²)/a², e'的平方=(a²-b²)/b², 过程如下:

一. e2=2*f-f*f=2*(a-b)/a-(a-b)/a * (a-b)/a=(a²-b²)/a²;// e2=公式中e的平方,正确

二. ee=e2*(1.0-e2)=(a²-b²)b²/(a² * a²);//ee!=e'的平方

不同点2: 代码与公式某常量值不同

公式中的X=.....(...+270C-330TC)...; Y=....(...+14C-58TC)....;

对应代码分别为...(...+600*C-330*ee)..; ...(...+72*C-58*ee);

修改后的代码:

/**   * 由经纬度反算成高斯投影坐标   *      * @param longitude     * @param latitude     * @return     */ public static double[] GaussToBLToGauss(double longitude, double latitude) {     int ProjNo = 0;  int ZoneWide; // //带宽   double[] output = new double[2];    double longitude1, latitude1, longitude0, X0, Y0, xval, yval;     double a, f, e2, ee, NN, T, C, A, M, iPI;     iPI = 0.0174532925199433; // //3.1415926535898/180.0;     ZoneWide = 6; // //6度带宽   a = 6378245.0;     f = 1.0 / 298.3; // 54年北京坐标系参数   // //a=6378140.0; f=1/298.257; //80年西安坐标系参数   ProjNo = (int) (longitude / ZoneWide);     longitude0 = ProjNo * ZoneWide + ZoneWide / 2;     longitude0 = longitude0 * iPI;     longitude1 = longitude * iPI; // 经度转换为弧度   latitude1 = latitude * iPI; // 纬度转换为弧度   e2 = 2 * f - f * f;     ee = e2 / (1.0 - e2);     NN = a    / Math.sqrt(1.0 - e2 * Math.sin(latitude1)      * Math.sin(latitude1));     T = Math.tan(latitude1) * Math.tan(latitude1);     C = ee * Math.cos(latitude1) * Math.cos(latitude1);     A = (longitude1 - longitude0) * Math.cos(latitude1);     M = a    * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256)      * latitude1                     - (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2 * e2        / 1024) * Math.sin(2 * latitude1)                     + (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024)      * Math.sin(4 * latitude1)                - (35 * e2 * e2 * e2 / 3072)      * Math.sin(6 * latitude1));    // 因为是以赤道为Y轴的,与我们南北为Y轴是相反的,所以xy与高斯投影的标准xy正好相反;    xval = NN    * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 14      * C - 58 * ee)                        * A * A * A * A * A / 120);  yval = M    + NN    * Math.tan(latitude1)                      * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24                  + (61      - 58 * T + T * T + 270 * C - 330 * ee)      * A * A * A * A * A * A / 720);    X0 = 1000000L * (ProjNo + 1) + 500000L;    Y0 = 0;    xval = xval + X0;    yval = yval + Y0;    output[0] = xval;    output[1] = yval;    return output; }

评论:而且xval, yval和公式中的X, Y正好反过来了

java 根据圆心计算圆弧上点的经纬度_【控制测量学】-高斯投影正算公式以及java代码相关推荐

  1. java 根据圆心计算圆弧上点的经纬度_冲压件展开计算方法(二),转发给每一位冲压人...

     点击↑模具达人教你成模具达人 点击阅读?牛人做了一把实用的夹具,夹的够紧... 接昨天的冲压件展开计算方法,转发给每一位冲压人 4  Z轧展开 4.1两次Z轧成形 图中t为材料厚度,H为Z轧折弯高度 ...

  2. 528_计算圆弧上某一点的坐标

    计算圆弧上某一点的坐标 计算出x坐标和y坐标 private float getXCoordinate(int angle, double r) {         angle = angle - 3 ...

  3. JAVA 计算地球上任意两点(经纬度)距离

    /*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...

  4. 在IOS中根据圆心坐标、半径和角度计算圆弧上的点坐标

    /** 日期:2015-10-15 版本: 1.0.0 -------------------------------------------------------------- 功能说明 ---- ...

  5. 计算圆弧上任意一点绕圆心旋转α角度后的新点坐标

    假设任意一点坐标为(x,y),圆心坐标为(Cx,Cy),旋转角度为α,新坐标为(x1,y1); 求(x1,y1)公式如下 x1 = (x-Cx)*Cos(α) - (y-Cy)*sin(α) + Cx ...

  6. Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    目录 方式一:自定义公式计算 方式二:geodesy计算距离 方式三:geotools计算距离 两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.8056 ...

  7. mysql中计算最大回撤_基金最大回撤算例(Java 1.8)

    1.测试数据源:长盛电子信息主题灵活配置混合(000063),2013-05-10~2016-04-15全部历史净值数据.数据净值曲线: 2016-4-17 18:26:30 上传 下载附件 (16. ...

  8. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  9. java前台传多个id用什么接收_前端js传多个id 到java后台的处理方式

    $("#createApplysjinfo").click(function(){ var allTableData=datagrid.bootstrapTable('getDat ...

最新文章

  1. 基于简化点云地图的语义边缘对齐的单目定位方法
  2. 闲谈IPv6-典型特征的一些技术细节
  3. 《Linux内核设计与实现》内存管理札记
  4. git reset --hard HEAD
  5. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法
  6. linux粘着位的使用(t权限)
  7. vuex mapGetters使用
  8. 【Leetcode | 1】93. 复原IP地址
  9. SSAS中出现“对象引用未被设置到对象实例”的解决记录
  10. FreeSwitch视频会议,4路以上CPU占用暴增的原因
  11. 20135202闫佳歆-第四章家庭作业-4.47+4.48
  12. 智能分数计算机在线使用,作业帮智能计算器在线使用
  13. java解密pdf文档,用于加密/解密pdf文件的Java API
  14. avm2 pcode 学习笔记。高手勿笑
  15. JAVA面试八股文宝典(黑马学习随笔)-- 基础篇
  16. excel操作技巧,你知道吗?反正我不知道
  17. 布法罗大学计算机硕士学费,纽约布法罗大学学费是多少
  18. 小红书怎么推广引流?怎么样在小红书上引流?
  19. (转)两性学堂——《搭讪入门指南》
  20. Nginx 动态添加IP黑名单

热门文章

  1. 动态规划--Leetcode746
  2. php获取外部URL,使用PHP从外部API / URL获取信息
  3. pythongui管理系统项目_Python实现GUI学生信息管理系统
  4. 高德sdk_联手HERE,高德进军地图海外市场 | CES 2020
  5. 反弹式木马原理_汽车避震器的原理与改装问题
  6. python中mysqldb模块_python中MySQLdb模块用法实例
  7. Windows 10 使用 Kali Linux子系统
  8. Spring Data JPA 从入门到精通~AliDruidDataSource的配置
  9. Exchanger及其用法
  10. 网络计算机显示10,win10电脑网络显示一个球怎么回事