【问题标题】:Finding a set of coordinates within a certain range from latitude and longitide从经纬度找一定范围内的一组坐标
【发布时间】:2011-04-02 21:55:11
【问题描述】:

我正在做一个涉及谷歌地图的 javascript 项目。

目标是从一组经纬度坐标中找出n公里范围内的16-20个坐标点,这样16个点如果连接起来就会围绕原始坐标形成一个圆圈。

最终目标是做到这一点,这样我就可以计算出要在谷歌地图上绘制和连接的坐标,从而围绕给定的一组坐标画一个圆圈。

代码如下:

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

现在让findCoordinates() 函数发生奇迹。

【问题讨论】:

    标签: javascript google-maps coordinates latitude-longitude


    【解决方案1】:

    基本上,您要做的是在给定半径的给定点的圆半径上找到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 并试一试。
    • 如何将范围限制为 xx KMs 或 xx Miles?
    • ConroyP,你是老板。这非常有用。这是否考虑了地球的曲率,例如半正弦距离计算?
    【解决方案2】:

    不久前我不得不找到一些代码来计算大圆距离(如果你不知道我在说什么,只需谷歌“大圆”),我找到了这个网站:

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

    您也许可以构建自己的 JavaScript 代码,以使用该站点的 JavaScript 作为参考来进行纬度/经度范围计算。在我看来,您只需将一个圆的 360 度分成相等数量的部分,然后在每个“方位”处从中心绘制一条等距离的线。一旦您知道每条方位/距离线另一端的纬度/经度,那么将这些点连接起来形成一个多边形就很简单了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2014-12-16
      • 2015-04-20
      • 2021-11-02
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      相关资源
      最近更新 更多