Lat / Lng地图上的圆半径

时间:2010-12-28 16:37:41

标签: javascript maps latitude-longitude

我正在尝试在CloudMade地图上绘制一个圆圈。圆的中心用Lat / Lng表示,而半径用米表示。以下是我使用的JavaScript,但有些测试似乎表明我用于半径的转换给我的半径太短。有人理解我做错了吗?

功能DrawCircle(中心,半径) {     var circlePoints = Array();

with (Math)
{
    var d = radius/6371000; // radians
    var lat1 = (PI/180) * center.lat(); // radians
    var lng1 = (PI/180) * center.lng(); // radians

    for (var a = 0; a <= 360; a++)
    {
        var tc = (PI/180) * a;
        var y = asin(sin(lat1) * cos(d) + cos(lat1) * sin(d) * cos(tc));
        var dlng = atan2(sin(tc) * sin(d) * cos(lat1), cos(d) - sin(lat1) * sin(y));
        var x = ((lng1 - dlng + PI) % (2 * PI)) - PI ; // MOD function
        var point = new CM.LatLng(parseFloat(y * (180/PI)), parseFloat(x * (180/PI)));
        circlePoints.push(point);
    }

    circle = new CM.Polygon(circlePoints, circleBorderColor, circleBorderWidth, circleBorderOpacity, circleFillColor, circleFillOpacity);
    map.addOverlay(circle);
}

}

1 个答案:

答案 0 :(得分:1)

我要做的是首先确定椭圆中有多少个点。我选择360让我很容易。然后,对于围绕圆的每度数的每个点,获得径向距离处的点并以此方式形成多边形。我把算法从here抬起来。