给定中心坐标(纬度/经度)、半径(米)和中心角(度)的球体(地球)上的圆弧面积 [关闭]

Posted

技术标签:

【中文标题】给定中心坐标(纬度/经度)、半径(米)和中心角(度)的球体(地球)上的圆弧面积 [关闭]【英文标题】:Area of a circle segment on sphere (Earth) given central coordinates (lat / long), radius (meters) and central angle (degrees) [closed] 【发布时间】:2019-06-12 13:21:26 【问题描述】:

情况

我有一个圆段和一些关于它所属的圆的信息。

给定信息:

圆心的坐标(纬度/经度) 半径以米为单位 圆心角以度为单位

我需要在 javascript 中计算圆段的 area。但它也应该取决于地球的半径(如great-circle distance)

问题

我不知道该怎么做,也找不到任何算法。

感谢您的帮助

【问题讨论】:

这应该在math.stackexchange.com询问 见这里:math.stackexchange.com/questions/280789/circle-on-sphere 中心坐标应该没有相关性 【参考方案1】:

geeksforgeeks.org 上有一个关于这个问题的优秀教程。

我已经翻译了他们的 JavaScript 代码,因为他们没有该语言的代码,并且您在问题中标记了它:

//Code ported from: https://www.geeksforgeeks.org/program-find-area-circular-segment/
function AreaOfSegment(radius, angle) 
    // Calculating area of sector 
    var areaOfSector = Math.PI * (radius * radius) *
        (angle / 360);
    // Calculating area of triangle 
    var areaOfTriangle = 0.5 * (radius * radius)
        * Math.sin((angle * Math.PI) / 180);
    return areaOfSector - areaOfTriangle;

//TEST
var radiusLabel = document.body.appendChild(document.createElement("label"));
radiusLabel.textContent = "Radius: ";
var radiusInput = radiusLabel.appendChild(document.createElement("input"));
radiusInput.type = "number";
radiusInput.step = "any";
radiusInput.min = "0";
radiusInput.value = "6371008.0";
var angleLabel = document.body.appendChild(document.createElement("label"));
angleLabel.textContent = "Angle: ";
var angleInput = angleLabel.appendChild(document.createElement("input"));
angleInput.type = "number";
angleInput.step = "any";
angleInput.min = "0";
angleInput.max = "360";
angleInput.value = "90";
var output = document.body.appendChild(document.createElement("p"));
function compute() 
    var radius = parseFloat(radiusInput.value);
    var angle = parseFloat(angleInput.value);
    output.textContent = 'Area is: ' + AreaOfSegment(radius, angle).toString();

compute();
["change", "keyup", "mouseup"].forEach(function (evt) 
    angleInput.addEventListener(evt, compute);
    radiusInput.addEventListener(evt, compute);
);

【讨论】:

谢谢,但是这个算法似乎计算的是平面的面积而不是球体(不考虑地球半径)

以上是关于给定中心坐标(纬度/经度)、半径(米)和中心角(度)的球体(地球)上的圆弧面积 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度

从任何点将米转换为纬度经度

python:使用纬度和经度查找提供位置半径内的位置的优雅方法

Python for循环遍历一列的所有行

当经纬度为已知点时计算100米距离

从中心到给定点的纬度、经度和地理区域(NW、NE、SW、SE)