Как преобразовать информацию TLE в широту и долготу для отображения на карте Bing? - PullRequest
3 голосов
/ 23 июня 2010

Я использую библиотеку OrbitTools для разработки системы спутникового слежения с использованием элемента управления Bing Maps Silverlight, аналогичного http://karhukoti.com.

. Я не обладаю достаточными знаниями в этой области, и мне не хватаетинформация, связанная со спутниковым слежением, но я начал учить себя, поскольку этот конкретный проект был выбран моим руководителем в качестве дипломного проекта.

Однако я столкнулся с многочисленными трудностями, одна из которых заключается в том, как преобразовать два линейных элемента (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.

Большое спасибо.

1 Ответ

2 голосов
/ 02 июля 2010

Вы все еще боретесь с этим? Когда я записал код, я заметил, что у них есть демо, которое они предоставляют вместе с библиотекой. В нем они показывают следующий метод, который, я уверен, вы должны были посмотреть:

static void PrintPosVel (Tle tle) { Орбита орбита = новая орбита (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);
     }
  }

В этом, кажется, что они делают преобразование, которое вы ищете. Я что-то упускаю из-за того, в чем проблема, что у вас на самом деле есть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...