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

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

38baf2996cedf1ffacb01b922866923b.png
d019528fcbab0a9c212f72f1d7680864.png
75a3104d45af50487ed1a9bfa81bf46c.png

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正好反过来了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode笔记】剑指 Offer 59 - II. 队列的最大值(Java、辅助队列)

文章目录题目描述思路 && 代码二刷题目描述 恢复打题的第二天打卡~ 可以说是这道最小栈的兄弟题目了,很相似总体思路还是一样,靠空间换时间~也就是借助辅助队列 思路 && 代码 这篇题解的动图做得很好&#xff…

redis setnx原子性_不支持原子性的 Redis 事务也叫事务吗?

文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 假设现在有这样一个业务,用户获取的某些数据来自第三方接口信息,为避免频繁请求第三方接口,我们往往会加一层缓存,缓存肯定要有时效性,假设我们…

【LeetCode笔记】剑指 Offer 67. 把字符串转换成整数 (Java、字符串)

文章目录题目描述思路 && 代码二刷题目描述 老阅读题了,感觉这道题有点类似写业务接口。 思路 && 代码 首先,把情况划分一下: 非正常值,直接给 0(这个实际上可以划分到2的代码中)可取…

详细描述三个适于瀑布模型的项目_信息系统项目管理师-第二三章:信息系统项目管理基础与立项管理2...

三、信息系统项目的生命周期1、项目生命周期的定义—项目从启动、组织与准备、执行到结束所经历的一系列阶段2、★项目生命周期的特征①成本与人力投入在开始时较低,在工作执行期间达到最高,并在项目快要结束时迅速回落②风险与不确定性在项目开始时最大,并在项目的整个生命周期…

【LeetCode笔记】剑指 Offer 64. 求1 + 2 + ... + n (Java、限制语法、二刷)

文章目录题目描述思路 && 代码注释版代码(方便理解):无注释版代码(方便背诵 )二刷题目描述 鬼鬼,又到了我最喜欢的戴着脚镣跳舞环节。 讲道理,我觉得这类题应该整个归纳啥的。。&#x…

虚拟dom_从0到1实现一个虚拟DOM

来源 | https://segmentfault.com/a/1190000021331850要构建自己的虚拟 DOM,需要知道两件事。你甚至不需要深入 React 的源代码或者深入任何其他虚拟 DOM 实现的源代码,因为它们是如此庞大和复杂——但实际上,虚拟 DOM 的主要部分只需不到 50…

【LeetCode笔记】剑指 Offer 31. 栈的压入、弹出序列 (Java、栈)

文章目录题目描述代码 && 思路二刷题目描述 打卡第三天!加油加油~ 数据结构笔试题貌似也会考 ,不过考法不一样,有点规律。总的来说还是挺有意思的,我们直接来看代码吧~ 代码 && 思路 O(…

【LeetCode笔记】剑指 Offer 20. 表示数值的字符串(Java、字符串)

文章目录题目描述思路 && 代码题目描述 呃…比较恶心的一道题,需要读好题,分完情况再下手有看到dalao用有限状态机来做,不过这边还是直接用了我自己的做法 思路 && 代码 ps:这里没有参考题解的写法&#xff…

【LeetCode笔记】剑指 Offer 16. 数值的整数次方(Java、分治)

文章目录题目描述思路 && 代码二刷题目描述 很棒的题目!便于分治思想的理解! 思路 && 代码 分情况是大头~递归结束的情况: x0x^0x0 1x1x^1x1 xx−1^-1−1 1 / x 偶数情况:直接二分递归奇数情况…

网站域名解析端口_环境测试必备,无需注册域名,免费动态IP解析一键解析本地网站...

localtunnel是基于Nodejs 开发的一个工具,开发者同时提供了Go语言版本。这个工具可以提供给你一个随机生成的二级域名,动态域名解析到你执行这个命令的服务器上,可以将域名解析到指定端口上。而且只需要一行代码。localtunnel安装在安装这个工…

【LeetCode笔记】剑指 Offer 33. 二叉树的后序遍历序列(Java、递归、栈)

文章目录题目描述思路 && 代码1. 递归做法2. 辅助栈做法二刷打卡第四天~昨天没来得及写博客 题目描述 无须多言,直接冲思路吧! 思路 && 代码 1. 递归做法 缺点:最差情况下,可能会退化成链表&…

LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)

文章目录题目描述思路 && 代码1. 哈希表法2. 原地算法二刷题目描述 主要有两个考虑点: 不能改变原链表新链表赋予 next、random 时,复制结点不一定存在 思路 && 代码 1. 哈希表法 O(n)、O(n)参考了dalao的写法,这里哈希表…

adam算法效果差原因_干货|快来get中央空调冬天制热效果差的十大原因!

作为调节室内温度的重要电器,中央空调在人们的生活中扮演着至关重要的角色。目前,市场上许多中央空调都是冷暖两用型,每到冬季,绝大部分家用中央空调都被纷纷派上用场;然而,有些用户在使用空调制热时&#…

linux查看日志命令_查看log日志基础命令

一.tail命令tail -f test.log 可以动态的查看服务器运行状态的日志head -n 5 test.log 显示top 5行tail -n 5 test.log 显示last 5行tail -n 5 test.log 从第5行开始显示,显示第5行以后的二.cat 命令cat 文件名 | head -n 数量,查看log.log前200行cat log.log | hea…

【LeetCode笔记】剑指 Offer 36. 二叉搜索树与双向链表(Java、二叉树、链表、原地算法)

文章目录题目描述思路 && 代码1. 非原地算法2. 原地算法二刷题目描述 谈到二叉搜索树,那就得考虑考虑中序遍历啦~这道题对中序遍历的理解提升很有好处! 思路 && 代码 1. 非原地算法 最简单的做法,依赖Array…

sqlserver2000给账户授予所有的权限_内网渗透 | 域内权限解读

域内权限解读目录域本地组全局组通用组A-G-DL-P策略内置组几个比较重要的域本地组几个比较重要的全局组、通用组的权限域本地组多域用户访问单域资源(访问同一个域)可以从任何域添加用户账户、通用组和全局组,但只能在其所在域内指派权限。域本地组不能嵌套于其他组…

【LeetCode笔记】剑指 Offer 38. 字符串的排列(Java、字符串、DFS)

文章目录题目描述思路 && 代码二刷打卡第五天&#xff5e; 题目描述 和这道题很相似&#xff0c;只是数据结构不同 思路 && 代码 DFS 辅助访问数组 Set 减枝通过 Set 实现去重 class Solution {Set<String> res new HashSet<>();char[] ar…

lombok依赖_使用Lombok 前你需要知道这些

转自&#xff1a;树下魅狐链接&#xff1a;https://ramostear.com/blog/2020/04/28/uk1860p8.html不得不承认&#xff0c;Lombok 是一个很不错的 Java 库&#xff0c;它可以让你在少写代码的同时耍耍酷&#xff0c;简单的几个注解&#xff0c;就可以干掉一大片模板代码。但是&a…

【LeetCode笔记】剑指 Offer 45. 把数组排成最小的数(Java、字符串、Lambda)

文章目录题目描述思路 && 代码二刷题目描述 很 nice 的一道题&#xff01;花的时间也不会很多&#xff0c;还能复习复习 Lambda&#xff5e; 思路 && 代码 核心思路&#xff1a;如果 x y > y x&#xff0c;说明 x 应该在 y 前面时间复杂度&#xff1a…

【LeetCode笔记】剑指 Offer 46. 把数字翻译成字符串(Java、字符串、动态规划、DFS)

文章目录题目描述思路 && 代码1. 动态规划做法2. DFS 做法二刷打卡第六天~继续加油&#xff01; 题目描述 万物皆可爬楼梯.…和爬楼梯原理很像&#xff0c;都是使用动态规划的做法来做~ 思路 && 代码 1. 动态规划做法 初始化&#xff1a;dp[0] 1, dp[1] …