Add GNSS Leaflet script

main
Jeff Moe 2022-06-12 21:54:47 -06:00
parent 9514c3c7d4
commit 8b85cb77a9
1 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,95 @@
#!/usr/bin/env python3
"""
galmon-gnss2leaflet
Retrieve Galmon GNSS satellites, output HTML map with leaflet.
Copyright (C) 2022, Jeff Moe
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
# Usage:
# galmon-gnss2leaflet
# Example:
# ./galmon-gnss2leaflet > ./html/gnss.html
# firefox ./html/gnss.html
import pandas as pd
# Grab live file:
#almanac_url='https://galmon.eu/almanac.json'
# Or use cached file:
almanac_url='data/almanac.json'
almanac = pd.read_json(almanac_url, orient='index')
def print_header():
print('<!DOCTYPE HTML>')
print('<html lang="en">')
print(' <head>')
print(' <meta charset="utf-8" />')
print(' <meta name="viewport" content="width=device-width, initial-scale=1.0">')
print(' <script src="leaflet/leaflet.js"></script>')
print(' <link rel="stylesheet" href="leaflet/leaflet.css" />')
print(' <style>')
print(' html, body {')
print(' height: 100%;')
print(' padding: 0;')
print(' margin: 0;')
print(' }')
print(' #map {')
print(' /* configure the size of the map */')
print(' width: 100%;')
print(' height: 100%;')
print(' }')
print(' </style>')
print(' </head>')
print(' <body>')
print(' <div id="map"></div>')
print(' <script>')
print(' var map = L.map(\'map\').setView({lon: 0, lat: 0}, 2);')
print(' L.tileLayer(\'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\', {')
print(' maxZoom: 19,')
print(' attribution: \'&copy; <a href="https://openstreetmap.org/copyright">OpenStreetMap contributors</a>', end="")
print(' | <a href="https://spacecruft.org/spacecruft/leaflet-galmon">Spacecruft source code</a>\'')
print(' }).addTo(map);')
print(' L.control.scale({imperial: false, metric: true}).addTo(map);')
def print_body():
df_dict=almanac.reset_index().to_dict(orient='index')
df_vals=list(df_dict.values())
for x in range(len(almanac)):
sat_long=(df_vals[x]["eph-longitude"])
sat_lat=(df_vals[x]["eph-latitude"])
if ( pd.isna(sat_lat) or pd.isna(sat_long) ) == False:
print(' L.marker({lon: ', end='')
print(sat_long, end='')
print(', lat:', sat_lat, end='')
print('}).bindPopup(\'', end='')
print(df_vals[x]['index'], end='')
print('\').addTo(map);')
def print_footer():
print(' </script>')
print(' </body>')
print('</html>')
def main():
print_header()
print_body()
print_footer()
if __name__ == "__main__":
main();