diff --git a/VIIRSdownloader.py b/VIIRSdownloader.py index 7ad76cf..65724ce 100644 --- a/VIIRSdownloader.py +++ b/VIIRSdownloader.py @@ -1,11 +1,15 @@ # -*- coding: utf-8 -*- """ -Downloads the actual active fire csv from https://firms.modaps.eosdis.nasa.gov/data/active_fire/suomi-npp-viirs-c2/csv/SUOMI_VIIRS_C2_Europe_24h.csv +Downloads the actual active fire csv from +https://firms.modaps.eosdis.nasa.gov/data/active_fire/suomi-npp-viirs-c2/csv/SUOMI_VIIRS_C2_Europe_24h.csv and displays it on a map. -Description of data displayed: https://www.earthdata.nasa.gov/learn/find-data/near-real-time/firms/vnp14imgtdlnrt#ed-viirs-375m-attributes +Description of data displayed: +https://www.earthdata.nasa.gov/learn/find-data/near-real-time/firms/vnp14imgtdlnrt#ed-viirs-375m-attributes @author: Cybermancer """ import sys +import argparse +import re import os.path import requests import datetime as dt @@ -17,69 +21,96 @@ from geopy.extra.rate_limiter import RateLimiter import pickle -def getAdress(data_frame): - adress_file = 'adressdump-' + str(dt.date.today()) - if not os.path.exists(adress_file): - adressList = [] +def fileFormat(args_inputfile): + pattern = re.compile(r'local_VIIRS_data-\d\d\d\d-\d\d-\d\d.csv') + if not re.match(pattern, args_inputfile): + raise argparse.ArgumentTypeError + return args_inputfile + + +def getAdress(data_frame, date): + address_file = 'adressdump-' + date + if not os.path.exists(address_file): + address_list = [] geolocator = Nominatim(user_agent='blub browser') reverse = RateLimiter(geolocator.reverse, min_delay_seconds=5) for r in data_frame.iterrows(): location = (r[1]['latitude'], r[1]['longitude']) - adressList.append(reverse(location, language='en')) - with open(adress_file, 'wb') as file: - pickle.dump(adressList, file) + address_list.append(reverse(location, language='en')) + with open(address_file, 'wb') as file: + pickle.dump(address_list, file) else: - with open(adress_file, 'rb') as file: - adressList = pickle.load(file) - return adressList + with open(address_file, 'rb') as file: + address_list = pickle.load(file) + return address_list -def main(): +def main(args): + date = str(dt.date.today()) bounding = [44.184598, 52.3797464, 22.137059, 40.2275801] - local_file = 'local_VIIRS_data-' + str(dt.date.today()) + '.csv' - html_file = local_file.split('.')[0] + '.html' src = ('https://gibs.earthdata.nasa.gov/wmts-webmerc/VIIRS_SNPP_CorrectedReflectance_BandsM11-I2-I1/' + 'default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpg') - - if not os.path.exists(local_file): - remote_url = r'https://firms.modaps.eosdis.nasa.gov/data/active_fire/suomi-npp-viirs-c2/csv/SUOMI_VIIRS_C2_Europe_24h.csv' - data = requests.get(remote_url, allow_redirects=True) - with open(local_file, 'wb') as file: - file.write(data.content) + if args.inputfile: + local_file = args.inputfile + date = re.search(r'\d{4}-\d\d-\d\d', args.inputfile).group(0) + else: + local_file = 'local_VIIRS_data-' + date + '.csv' + if not os.path.exists(local_file): + try: + remote_url = r'https://firms.modaps.eosdis.nasa.gov/data/active_fire/suomi-npp-viirs-c2/csv/SUOMI_VIIRS_C2_Europe_24h.csv' + data = requests.get(remote_url, allow_redirects=True) + with open(local_file, 'wb') as file: + file.write(data.content) + except: + SystemExit(2) + + html_file = local_file.split('.')[0] + '.html' data_frame = pd.read_csv(local_file) data_frame = data_frame.astype({'confidence': 'string'}) - inUkraine = data_frame[data_frame['latitude'].between(bounding[0], bounding[1]) & data_frame['longitude'].between( + in_ukraine = data_frame[data_frame['latitude'].between(bounding[0], bounding[1]) & data_frame['longitude'].between( bounding[2], bounding[3]) & (data_frame['confidence'].str.contains('nominal') | data_frame['confidence'].str.contains('high'))] - adressList = getAdress(inUkraine) - if not inUkraine.empty: - fireMap = folium.Map(location=inUkraine[['latitude', 'longitude']].mean( - ).to_list(), zoom_start=4, crs='EPSG3857') + + if not args.noreversegeolocation: + address_list = getAdress(in_ukraine, date) + else: + address_list = [] + + if not in_ukraine.empty: + fire_map = folium.Map(location=in_ukraine[['latitude', 'longitude']].mean( + ).to_list(), zoom_start=4, max_bounds=True, crs='EPSG3857') folium.raster_layers.TileLayer( tiles=src, subdomains='abc', - name='VIIRS', + name='VIIRS CorrectedReflectance_BandsM11-I2-I1', attr='NASA VIIRS', overlay=True, layer='VIIRS_SNPP_CorrectedReflectance_BandsM11-I2-I1', tileMatrixSet='GoogleMapsCompatible_Level9', - time=str(dt.date.today() - dt.timedelta(days=1)), + time=str(dt.date.fromisoformat(date) - dt.timedelta(days=1)), tileSize=256, - ).add_to(fireMap) - folium.LayerControl().add_to(fireMap) - for r in inUkraine.iterrows(): + ).add_to(fire_map) + folium.LayerControl().add_to(fire_map) + for r in in_ukraine.iterrows(): location = (r[1]['latitude'], r[1]['longitude']) folium.Marker(location=location, tooltip=( - r[1].to_string())).add_to(fireMap) - for adress in adressList: - if adress is not None: - location = (adress.raw['lat'], adress.raw['lon']) - folium.CircleMarker(location=location, tooltip=(str(adress.raw['display_name'])), - radius=10).add_to(fireMap) - - fireMap.save(html_file) - webbrowser.open_new(html_file) + r[1].to_string())).add_to(fire_map) + if address_list: + for address in address_list: + if address is not None: + location = (adress.raw['lat'], adress.raw['lon']) + folium.CircleMarker(location=location, tooltip=(str(adress.raw['display_name'])), + radius=10).add_to(fire_map) + if not os.path.exists(html_file): + fire_map.save(html_file) + webbrowser.open_new(html_file) sys.exit(0) if __name__ == '__main__': - main() + parser = argparse.ArgumentParser() + parser.add_argument( + '-i', '--inputfile', type=fileFormat, help='Specify the cvs file containing the satellite data to be displayed. INPUTFILE must match local_VIIRS_data-YYYY-MM-DD.csv') + parser.add_argument('-nr', '--noreversegeolocation', action='store_true', + help='Disable reverse geolocation') + args = parser.parse_args() + main(args)