从纬度和经度中找到一组在特定范围内的坐标

3

我正在进行一项关于使用Google Maps的JavaScript项目。

目标是找出与一组纬度经度坐标相距n公里范围内的16-20个坐标点,这样连接起来将形成一个圆形。

最终目标是计算出坐标以在Google地图上绘制并连接成给定坐标周围的圆形。

代码可能如下:

var coordinates = Array();
function findCoordinates(lat, long, range) {
}
coordinates = findCoordinates(-20, 40, 3);

现在让我们进入 findCoordinates() 函数的幕后制造奇迹。
2个回答

7
基本上,您要做的是在给定半径和点的情况下,在圆的半径上找到N个点。一种简单的方法是将圆的360度分成N个相等的部分,并在固定间隔处找到点。
以下内容大致可以满足您的需求 -
function findCoordinates(lat, long, range)
{
    // How many points do we want? (should probably be function param..)
    var numberOfPoints = 16;
    var degreesPerPoint = 360 / numberOfPoints;

    // Keep track of the angle from centre to radius
    var currentAngle = 0;

    // The points on the radius will be lat+x2, long+y2
    var x2;
    var y2;
    // Track the points we generate to return at the end
    var points = [];

    for(var i=0; i < numberOfPoints; i++)
    {
        // X2 point will be cosine of angle * radius (range)
        x2 = Math.cos(currentAngle) * range;
        // Y2 point will be sin * range
        y2 = Math.sin(currentAngle) * range;

        // Assuming here you're using points for each x,y..             
        p = new Point(lat+x2, long+y2);

        // save to our results array
        points.push(p);

        // Shift our angle around for the next point
        currentAngle += degreesPerPoint;
    }
    // Return the points we've generated
    return points;
}

你得到的点数组可以轻松用于在谷歌地图上绘制所需的圆。

然而,如果你的总体目标只是在一个点周围以固定半径绘制一个圆,则使用覆盖层可能是一种更简单的解决方案。我发现 KMBox 很容易设置——你给它一个中心点、一个半径和一个图像覆盖层(在你的情况下,是一个带有可见边缘线的透明圆),它会处理其他所有事情,包括缩放时的调整大小。


非常感谢。这正是我在寻找的。我会研究一下KMBox并尝试一下。 - user396404
你如何限制范围,比如说 xx 公里或 xx 英里? - Mrchief
1
ConroyP,你是个牛人。这非常有用。这个计算是否考虑了地球的曲率,就像应用“Haversine”距离公式一样? - Dave Romero

1
我曾经需要找到一些代码来计算大圆距离(如果你不知道我在说什么,可以在谷歌上搜索“Great Circle”),然后我发现了这个网站:

http://williams.best.vwh.net/gccalc.htm

你可以利用该网站提供的 JavaScript 作为参考,构建自己的 JavaScript 代码来进行经纬度范围计算。听起来你只需要将一个圆的 360 度均分成相等的部分,并在每个“方位角”处沿着一条等距离线画出一条线。一旦你知道了每条轴承/距离线另一端的经纬度,那么连接点以形成一个多边形就是微不足道的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接