commit ecb003bec3dc4d7f72981a0640bca9bc1f7f6131 Author: unknown Date: Tue Jul 26 16:09:34 2022 +0200 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/VIIRSdownloader.py b/VIIRSdownloader.py new file mode 100644 index 0000000..7ad76cf --- /dev/null +++ b/VIIRSdownloader.py @@ -0,0 +1,85 @@ +# -*- 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 +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 +@author: Cybermancer +""" +import sys +import os.path +import requests +import datetime as dt +import pandas as pd +import folium +import webbrowser +from geopy.geocoders import Nominatim +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 = [] + 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) + else: + with open(adress_file, 'rb') as file: + adressList = pickle.load(file) + return adressList + + +def main(): + 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) + 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( + 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') + folium.raster_layers.TileLayer( + tiles=src, + subdomains='abc', + name='VIIRS', + attr='NASA VIIRS', + overlay=True, + layer='VIIRS_SNPP_CorrectedReflectance_BandsM11-I2-I1', + tileMatrixSet='GoogleMapsCompatible_Level9', + time=str(dt.date.today() - dt.timedelta(days=1)), + tileSize=256, + ).add_to(fireMap) + folium.LayerControl().add_to(fireMap) + for r in inUkraine.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) + sys.exit(0) + + +if __name__ == '__main__': + main()