>

문제가 있습니다. Javascript 및 Google Maps API v2를 사용하여 다음을 수행하려고합니다.

인터넷에서 찾은 공식을 사용하여 개별 원을 잘 그릴 수 있습니다. 내가 직면 한 문제는 서클이 다음과 같아야한다는 것입니다.

A. 동심하고 B. 각 "사분면"에 대해 서로 다른 반경을 가져야합니다 (예 : NE, NW, SE 및 SW

).

인터넷에서 생각할 수있는 거의 모든 곳을 검색했으며이 작업을 수행하는 방법을 찾지 못했습니다. 분명히 누군가 전에이 작업을 수행 했으므로 프로그래머 포럼에서 묻는 이유는 무엇입니까? :)

감사합니다!

업데이트 :다음 코드를 사용하여 각 점의 좌표가 무엇인지 생각했습니다. 아래 그림의 경우 :

이것은 다음 JS를 사용하여 얻었습니다 :

http://gist.github.com/181290

참고 :이 자바 스크립트는 다음 사이트에서 (약간 수정 된) 사이트이며,이 알고리즘은 알고리즘의 결과와 관련하여 http://www.movable-type.co.uk/scripts/latlong.html

업데이트 2 :Google지도에서이 정보를 얻을 수있었습니다 :

다음 코드를 사용하여 생성 :

var NEQ = [0, 90];
var SEQ = [90, 180];
var SWQ = [180, 270];
var NWQ = [270, 0];
// var centrePoint = new LatLon(25.0, -83.1);
// pointsForWindQuadrant(NEQ, centrePoint, 50);
function pointsForWindQuadrant(quadrantDegrees, centrePoint, radius){
  var points = [];
  // Points must be pushed into the array in order
  points.push(new google.maps.LatLng(centrePoint.lat, centrePoint.lon));
  for(i = quadrantDegrees[0]; i <= quadrantDegrees[1]; i++){
    var point = centrePoint.destPoint(i, radius * 1.85);
    points.push(new google.maps.LatLng(point.lat, point.lon)); // Radius should be in nautical miles from NHC
  }
  points.push(new google.maps.LatLng(centrePoint.lat, centrePoint.lon));
  return points;
}

업데이트 3 :아마도 이것이 직교 좌표계가 아닌지리 좌표계용임을 지적해야합니다. 좌표계. 감사합니다!


  • 답변 # 1

    기본적으로 원을 x, y = (cos (a), sin (a))로 계산 한 다음 적절한 각도의 함수 인 반지름으로이 두 항을 곱합니다. Javascript 또는 Google지도를 잘 모르므로 Python에서이 작업을 수행 할 것입니다. 잘 알고 있으면 충분합니다.

    from pylab import *
    def Rscale(a):
        if a>3*pi/2:  # lower right, and then work CW around the circle
            return 1.
        elif a>pi:  # lower left
            return .9
        elif a>pi/2:   # upper left
            return .8
        else:       # upper right
            return 1.
    def step_circle(R):
        return array([(R*Rscale(a))*array([cos(a), sin(a)]) for a in arange(0, 2*pi, .001)])
    for R in (.5, .7, .9):  # make three concentric circles
        c = step_circle(R)
        plot(c[:,0], c[:,1])
    show()
    
    

    어느 것이

    실제로 스케치를 따라갈 수 없었기 때문에 숫자 만 추측했습니다. 또한, 가장 오른쪽에있는 2 개의 사분면을 같은 모양으로 만들었습니다. 왜냐하면 그것은 음모의 모습과 같지만 물론 선택 사항입니다.

  • 답변 # 2

    내가 알아 냈습니다. 최종 코드는 다음과 같습니다. 약간 리팩터링 될 수 있습니까?

    // Returns points for a wind field for a cyclone. Requires
    // a LatLon centre point, and an array of wind radii, starting
    // from the northeast quadrant (NEQ), i.e., [200, 200, 150, 175]
    //
    // Returns points to be used in a GPolyline object.
    function pointsForWindQuadrant(centrePoint, radii){
      if(radii.length != 4){ return false; }
      var points = [];
      var angles = [0, 90, 180, 270];
      // For each angle 0, 90, 180, 270...
      for(a = 0; a < angles.length; a++){
        // For each individual angle within the range, create a point...
        for(i = angles[a]; i <= angles[a] + 90; i++){
          var point = centrePoint.destPoint(i, radii[a] * 1.85); // Radius should be in nautical miles from NHC
          points.push(new google.maps.LatLng(point.lat, point.lon));
        }
      }
      // Add the first point again, to be able to close the GPolyline
      var point = centrePoint.destPoint(0, radii[0] * 1.85);
      points.push(new google.maps.LatLng(point.lat, point.lon));
      return points;
    }
    
    

    결과는 다음과 같습니다.

  • 이전 symfony - symfony2 서비스에 SwiftMailer 주입
  • 다음 python - Django를 사용하여 전단지 맵에 PostGis 다각형