需要找到拉特和;距离一个地方约50公里的位置

时间:2011-07-22 12:24:47

标签: android google-maps geolocation latitude-longitude

我需要找到距离某个特定点约50公里的任何点。我该怎么做?

3 个答案:

答案 0 :(得分:1)

这将使你非常接近,它基于方程和可用的示例代码here

window.pointsAround = function(centerLat, centerLng, radius) {
    var result = [];

    //do annoying trig maths to work out the delta in latitude between our start and end points
    var targetD = radius;          //km
    var R = 6371;                  //km
    var c = (targetD / R) / 2;
    var sqrtA = Math.sin(c);
    var a = sqrtA * sqrtA;
    var sinHalfDLat = Math.sqrt(a);
    var dLat = Math.asin(sinHalfDLat) * 2;
    var dLatDegrees = ((dLat / (2 * Math.PI)) * 360);

    var minLat = centerLat - dLatDegrees;            //furthest valid latitude above the origin
    var maxLat = centerLat + dLatDegrees;            //furthest valid latitude below the origin

    //alert("minLat=" + minLat + ", maxLat=" + maxLat + ", dLat=" + dLat + ", dLatDegrees=" + dLatDegrees);

    //topmost and bottommost points in the circle
    result.push({lat: minLat, lng: centerLng});
    result.push({lat: maxLat, lng: centerLng});

    //step from minLat to maxLat, interpolating coordinates that lie upon the circle
    var step = (maxLat - minLat) / 180.0;
    for (var count = 0; count < 179; count++) {
        minLat += step;
        dLat = (centerLat - minLat) * Math.PI / 180;

        //more annoying trig to work out the delta in longitude for our interpolated coordinate
        var dLon = 2 * Math.asin(Math.sqrt((a - (Math.sin(dLat/2) * Math.sin(dLat/2))) / (Math.cos(minLat) * Math.cos(centerLat))));
        var dLonDegrees = ((dLon / (2 * Math.PI)) * 360);

        var newLng = centerLng + dLonDegrees;
        var deltaLng = newLng - centerLng;
        result.push({lat: minLat, lng: newLng});
        result.push({lat: minLat, lng: centerLng - deltaLng});
    }

    return result;
};

对于可怕的变量名称感到抱歉,正如我所说,它们基于使用相同名称的示例实现。

以下是一个工作示例:http://jsfiddle.net/HmchC/8/

情节比我想要的更椭圆,但是。那就像我现在所能得到的那样近。

<强>更新

我用椭圆绘图解决了这个问题,它只是缺少从度数到弧度的转换。数学人什么时候才能知道只有学位才有意义?

无论如何,这里有一个工作示例:http://jsfiddle.net/HmchC/11/

答案 1 :(得分:0)

嗯,嗯,特别清楚你在这之后的情况。

如果你有一个已知的点(已知纬度和长度)并且位于已知点周围50公里圆周上的点的纬度和经度之后?

无论如何我是怎么看的......我想你可以用一些数学来做这件事。恒定距离(如公里)将等同于纬度/经度的恒定变化,您可以计算和定义。它会变得棘手的是确定这个变化应用于纬度和长度多少,我想你可以使用指南针轴承,如果设备支持一个

编辑:假设我们对您的要求是正确的,那么Aroth评论中的链接可以帮助您

答案 2 :(得分:0)

您想要查找harvesine公式或空间填充曲线或空间索引。 harvesine公式计算2个圆的碰撞,空间填充曲线递归地将地图细分为图块。它看起来像四叉树,它将2d复杂度降低到1d复杂度。您希望查找唯一的键或象限来查找近点。你想看看尼克的希尔伯特曲线空间索引四叉树博客。