2010-12-28 4 views
1

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); 
} 

}

+0

나는이 기능이 완벽하게 정확하다는 것을 두 번 확인하고 발견했다. 내가 잘못된 점은 내가 결과를 비교하는 다른 기능 이었다는 것이다. 당신을 괴롭히는 것에 대해 유감스럽게 생각합니다 :) –

답변

1

. 나는 나를 쉽게 만들기 위해 360을 선택했다. 그런 다음 원 주위의 각도 당 각 점에 대해 방사형 거리에서 점을 가져 와서 그 방향으로 다각형을 만듭니다. 내 알고리즘 here에서 jacked.

+0

안녕하세요 차드, 내 기능을 볼 수있는 한 연결된 모든 사람이 동일합니다. –