96 lines
3.3 KiB
Python
Executable File
96 lines
3.3 KiB
Python
Executable File
#!/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: \'© <a href="https://openstreetmap.org/copyright">OpenStreetMap contributors</a>', end="")
|
|
print(' | <a href="https://galmon.eu">Galmon</a> | <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();
|