getGroundTrack method

List<LatLng> getGroundTrack(
  1. LatLngAlt satellite, {
  2. double precesion = 1,
})

Gets a polygon on the surface of the planet where a viewer can see.

Implementation

List<LatLng> getGroundTrack(
  LatLngAlt satellite, {
  double precesion = 1,
}) {
  final zone = <LatLng>[];

  final latitude = satellite.latitude.radians;
  final longitude = satellite.longitude.radians;
  final altitude = satellite.altitude;

  final cosLat = cos(latitude);
  final sinLat = sin(latitude);

  double num4 = acos(radius / altitude);
  if (num4.isNaN) {
    num4 = 0.0;
  }
  final cosNum4 = cos(num4);
  final sinNum4 = sin(num4);
  int i = 0;
  do {
    final angle = pi / 180.0 * i;
    final lat = asin(sinLat * cosNum4 + cos(angle) * sinNum4 * cosLat);
    final num9 = (cosNum4 - sinLat * sin(lat)) / (cosLat * cos(lat));
    final lng = (((i != 0 || !(num4 > pi / 2.0 - latitude)) && 0 == 0)
        ? (((i == 180 && num4 > pi / 2.0 + latitude))
            ? (longitude + pi)
            : ((num9.abs() > 1.0)
                ? longitude
                : ((i > 180)
                    ? (longitude - acos(num9))
                    : (longitude + acos(num9)))))
        : (longitude + pi));

    final z = LatLng(
      lat * _rad2deg,
      lng * _rad2deg,
    );

    zone.add(z);

    i++;
  } while (i <= 359);

  zone.add(
    LatLng(
      zone[0].latitude,
      zone[0].longitude,
    ),
  );

  return zone;
}