skyview.cgi 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use GD::Graph::Polar;
  5. use Net::GPSD3 0.14;
  6. use CGI;
  7. =head1 NAME
  8. skyview.cgi - Builds a Skyview PNG image from a POLL request to a GPSD server
  9. =head1 COPYRIGHT
  10. Copyright 2011 - Michael R. Davis
  11. This file is Copyright 2011 by the GPSD project
  12. SPDX-License-Identifier: BSD-2-clause
  13. This program is free software licensed under The BSD License.
  14. =cut
  15. my $cgi=CGI->new;
  16. my $host=$cgi->param("host") || undef;
  17. my $port=$cgi->param("port") || undef;
  18. my $gpsd=Net::GPSD3->new(host=>$host, port=>$port);
  19. my $size=$cgi->param("size") || 380;
  20. my $gd=GD::Graph::Polar->new(size=>$size, radius=>90, border=>3, ticks=>9);
  21. my $poll;
  22. eval '$poll=$gpsd->poll';
  23. my $error=$@;
  24. if ($error) {
  25. chomp $error;
  26. $gd->color([248,8,8]); #red
  27. $gd->addString(127=>134.5, $error);
  28. } else {
  29. foreach my $sat ($poll->sky->Satellites) {
  30. if ($sat->ss > 34) {
  31. $gd->color([16,240,16]); #green
  32. } elsif ($sat->ss >= 30) {
  33. $gd->color([240,240,16]); #yellow
  34. } elsif ($sat->ss >= 10) {
  35. $gd->color([240,16,16]); #red
  36. } else {
  37. $gd->color([128,128,128]); #gray
  38. }
  39. $gd->addGeoPoint(90-$sat->el => $sat->az);
  40. $gd->color([16,16,16]);
  41. $gd->addGeoString(90-$sat->el => $sat->az, $sat->prn);
  42. }
  43. }
  44. $gd->color([210,210,210]); #gray
  45. $gd->addGeoString(122 => 227.0, "Copyright 2011 Michael R. Davis");
  46. print "Content-type: image/png\n\n", $gd->draw;