2010-06-23 312 views
3

我使用OrbitTools库来开发使用类似于http://karhukoti.com Bing地图Silverlight控件卫星跟踪系统。如何将TLE信息转换为经度纬度和海拔高度以显示在Bing地图上?

我不是在这个领域的知识和缺乏很多相关的卫星跟踪信息,但已经开始自学为这个特殊的项目是由我的导师作为毕业设计选择。

不过,我面临许多困难,主要的一个是如何将两个线元素(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

您遇到的确切问题是什么?这是一个坐标问题(显示的东西,但在错误的地方)或显示问题(没有显示)? – 2010-07-03 19:13:23

回答

2

这是你仍在挣扎的东西吗?我注意到,当我拉下代码时,他们有一个演示程序,他们随图书馆一起提供。在它里面,他们展示了我肯定你一定看过的以下方法:

static void PrintPosVel(Tle tle) Orbit = new Orbit(tle); ArrayList Pos = new 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); 
    } 
    } 

在这看来,他们正在进行转换,你正在寻找。我是否错过了你实际存在的问题?

相关问题