Радиус круга на карте Lat / Lng - PullRequest
1 голос
/ 28 декабря 2010

Я пытаюсь нарисовать круг на карте CloudMade.Центр круга выражается в широте / долготе, а радиус - в метрах.Ниже приведен 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 Ответ

1 голос
/ 28 декабря 2010

То, что я сделал для достижения этой цели, - это сначала решить, сколько точек в эллипсе. Я выбрал 360, чтобы мне было легче. Затем, для каждой точки на градус вокруг круга, получите точку на радиальном расстоянии и сделайте таким образом многоугольник. Я поднял мой алгоритм с здесь .

...