2010-06-23 8 views
3

과 비슷한 Bing Maps Silverlight 컨트롤을 사용하여 위성 추적 시스템을 개발하기 위해 OrbitTools 라이브러리를 사용하고 있습니다.TLE 정보를 경도 위도와 고도로 변환하여 Bing 맵에 표시하려면 어떻게해야합니까?

저는이 분야에 익숙하지 않고 위성 추적과 관련된 많은 정보가 없지만이 특정 프로젝트가 상사가 졸업 프로젝트로 선택했기 때문에 스스로 가르치기 시작했습니다.

그러나 나는 많은 어려움에 직면했다. 주요한 것은 2 선 요소 (TLE) 정보를 경도 위도와 고도로 변환하여 위성 및 위성 경로를지도에 표시하는 방법이다.

나는 다음과 같은 C# 코드 시도 :

protected void DisplaySatellitePath(List<Eci> Pos) 
{ 
    MapLayer myRouteLayer = new MapLayer(); 
    myMap.Children.Add(myRouteLayer); 

    foreach (Eci e in Pos) 
    { 
    CoordGeo coordinates = e.toGeo(); 

    Ellipse point = new Ellipse(); 
    point.Width = 10; 
    point.Height = 10; 
    point.Fill = new SolidColorBrush(Colors.Orange); 
    point.Opacity = 0.65; 

    //Location location = new Location(e.Position.X, e.Position.X); 
    Location location = new Location(coordinates.Latitude, coordinates.Longitude); 

    MapLayer.SetPosition(point, location); 
    MapLayer.SetPositionOrigin(point, PositionOrigin.Center); 
    myRouteLayer.Children.Add(point); 
    } 
} 

를 또한 내가 잘못 여기서 뭘하는지

protected void DisplaySatellitePathSecondGo(List<Eci> Pos) 
    { 
    MapLayer myRouteLayer = new MapLayer(); 
    myMap.Children.Add(myRouteLayer); 

    foreach (Eci e in Pos) 
    { 

    Ellipse point = new Ellipse(); 

    point.Width = 10; 
    point.Height = 10; 
    point.Fill = new SolidColorBrush(Colors.Yellow); 
    point.Opacity = 0.65; 

    Site siteEquator = new Site(e.Position.X, e.Position.Y, e.Position.Z); 
    Location location = new Location(siteEquator.Latitude, siteEquator.Longitude); 
    MapLayer.SetPosition(point, location); 
    MapLayer.SetPositionOrigin(point, PositionOrigin.Center); 
    myRouteLayer.Children.Add(point); 
    } 
} 

당신이 말해 주시겠습니까 시도? OrbitTools에 대한 예제 나 문서를 검색했지만 운이 없었습니다.

정말이 라이브러리를 사용하는 누군가 나를 도와 주거나 더 나은 .NET 라이브러리를 제안하기를 바랍니다.

대단히 감사합니다.

+0

현재 구현에서 발생한 정확한 문제는 무엇입니까? 좌표 문제입니까? (뭔가 잘못 표시되었지만 잘못된 위치에 표시됩니다) 또는 디스플레이 문제입니까 (아무것도 표시되지 않습니다)? –

답변

2

이 문제가 여전히 고심하고 있습니까? 나는 그들이 라이브러리와 함께 제공하는 데모를 가지고있는 코드를 뽑았을 때 알아 차렸다. 그것들은 다음과 같은 방법으로 보여야합니다 :

static void PrintPosVel (Tle tle) { 궤도 궤도 = 새로운 궤도 (톨); ArrayList Pos = 새 ArrayList();

 // Calculate position, velocity 
    // mpe = "minutes past epoch" 
    for (int mpe = 0; mpe <= (360 * 4); mpe += 360) 
    { 
     // Get the position of the satellite at time "mpe". 
     // The coordinates are placed into the variable "eci". 
     Eci eci = orbit.getPosition(mpe); 

     // Push the coordinates object onto the end of the array 
     Pos.Add(eci); 
    } 

    // Print TLE data 
    Console.Write("{0}\n", tle.Name); 
    Console.Write("{0}\n", tle.Line1); 
    Console.Write("{0}\n", tle.Line2); 

    // Header 
    Console.Write("\n TSINCE   X    Y    Z\n\n"); 

    // Iterate over each of the ECI position objects pushed onto the 
    // position vector, above, printing the ECI position information 
    // as we go. 
    for (int i = 0; i < Pos.Count; i++) 
    { 
     Eci e = Pos[i] as Eci; 

     Console.Write("{0,4}.00 {1,16:f8} {2,16:f8} {3,16:f8}\n", 
         i * 360, 
         e.Position.X, 
         e.Position.Y, 
         e.Position.Z); 
    } 

    Console.Write("\n     XDOT    YDOT    ZDOT\n\n"); 

    // Iterate over each of the ECI position objects in the position 
    // vector again, but this time print the velocity information. 
    for (int i = 0; i < Pos.Count; i++) 
    { 
     Eci e = Pos[i] as Eci; 

     Console.Write("{0,24:f8} {1,16:f8} {2,16:f8}\n", 
         e.Velocity.X, 
         e.Velocity.Y, 
         e.Velocity.Z); 
    } 
    } 

이렇게하면 찾고있는 변환이 이루어지는 것처럼 보입니다. 나는 당신이 실제로 가지고있는 문제가 무엇인지 놓치고 있습니까?