开发者

Circle radius on Lat/Lng map

I am trying to draw a circle on a CloudMade map. The center of the circle is expressed in Lat/Lng, while the radius is in meters. Here following is the JavaScript I use, but some tests seem to indictae that the conversion I'm using for the radius gives me a too short radius. Does somebody understand what I', doing wrong?

function DrawCircle (center, radius)
{
    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);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜