首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript中不同纬度地球半径的计算

JavaScript中不同纬度地球半径的计算
EN

Stack Overflow用户
提问于 2022-01-21 17:37:46
回答 4查看 183关注 0票数 1

我正在绘制地图上的工具,在地图中,我根据地图的坐标计算出一个圆圈的半径。这看起来不错,但我看到,如果这个圆圈是在远离赤道的地方画出来的,它的位置与鼠标的位置不完全匹配。这是因为我使用了一个方程,它考虑了地球半径6371,000米。地球的真正半径根据离赤道的距离而变化,我发现可以用这个公式来计算:

代码语言:javascript
运行
复制
latitude B, radius R, radius at equator r1, radius at pole r2

R = √ [ (r1² * cos(B))² + (r2² * sin(B))² ] / [ (r1 * cos(B))² + (r2 * sin(B))² ] 

根据https://rechneronline.de/earth-radius/

我如何用JavaScript写这个公式呢?

EN

回答 4

Stack Overflow用户

发布于 2022-01-21 17:57:57

假设你的公式是正确的-我是一个程序员,而不是地理学家;试试这个:

代码语言:javascript
运行
复制
function square(number) {
    return Math.pow(number,2);
}
var lattitude;
const radiusAtEquator = 6371000;
const radiusAtPole = Number.MIN_VALUE;
var radius = Math.sqrt(square(square(radiusAtEquator) * Math.cos(lattitude))) / (square(radiusAtEquator * Math.cos(lattitude)) + square(radiusAtPole * Math.sin(lattitude)))

如果您想取整件事情的平方根,只需从'/‘之前删除一个’),并将其添加到末尾。此外,在运行程序之前,您必须给延迟一个数值,否则它将无法工作。

票数 0
EN

Stack Overflow用户

发布于 2022-01-21 18:02:44

我将编写公式,但您可以编辑它,使其更具可读性:

代码语言:javascript
运行
复制
function calculateR(B,r1,r2){
  const R = Math.sqrt(
    ((r1*r1 * Math.cos(B))*(r1*r1 * Math.cos(B)) + (r2*r2 * Math.sin(B))*(r2*r2 * Math.sin(B)) / 
    ((r1* Math.cos(B))*((r1* Math.cos(B)) + (r2*Math.sin(B)*(r2*Math.sin(B)))))))
  return R;
}

//call your method here :
console.log(calculateR(1,2,3));
票数 0
EN

Stack Overflow用户

发布于 2022-01-21 21:14:55

我们总是可以从源代码中窥探他们是如何做到的。它们的源是存储的这里。有关的计算如下:

代码语言:javascript
运行
复制
var z=Math.sqrt((Math.pow(r1*r1*Math.cos(x),2)+Math.pow(r2*r2*Math.sin(x),2)) / (Math.pow(r1*Math.cos(x),2)+Math.pow(r2*Math.sin(x),2)));

但它有很多多余的计算。我们可以这样优化它:

代码语言:javascript
运行
复制
function getSpheroidRadius(B, r1, r2)
{
    if (Math.abs(B) > 90)
        throw Error('Invalid Latitude value supplied: ' + B);

    let r1Sq = r1 * r1;
    let r2Sq = r2 * r2;
    let equatorProjectionSq = r1Sq * Math.cos(B) ** 2;
    let poleProjectionSq = r2Sq * Math.sin(B) ** 2;
    let r = Math.sqrt(
        ((equatorProjectionSq * r1Sq) + (poleProjectionSq * r2Sq))
        / (equatorProjectionSq + poleProjectionSq)
    );
    return r;
}

console.log(getSpheroidRadius(50, 6378.137, 6356.7523));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70805416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档