a little bit of refactoring
This commit is contained in:
		@@ -1,34 +1,35 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
Downloads the actual active fire csv from 
 | 
					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
 | 
					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.
 | 
					and displays it on a map.
 | 
				
			||||||
Description of data displayed: 
 | 
					Description of data displayed:
 | 
				
			||||||
https://www.earthdata.nasa.gov/learn/find-data/near-real-time/firms/vnp14imgtdlnrt#ed-viirs-375m-attributes
 | 
					https://www.earthdata.nasa.gov/learn/find-data/near-real-time/firms/vnp14imgtdlnrt#ed-viirs-375m-attributes
 | 
				
			||||||
@author: Cybermancer
 | 
					@author: faraway
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
import os.path
 | 
					import os.path
 | 
				
			||||||
import requests
 | 
					import pickle
 | 
				
			||||||
import datetime as dt
 | 
					import datetime as dt
 | 
				
			||||||
 | 
					import webbrowser
 | 
				
			||||||
 | 
					import requests
 | 
				
			||||||
import pandas as pd
 | 
					import pandas as pd
 | 
				
			||||||
import folium
 | 
					import folium
 | 
				
			||||||
import webbrowser
 | 
					
 | 
				
			||||||
from geopy.geocoders import Nominatim
 | 
					from geopy.geocoders import Nominatim
 | 
				
			||||||
from geopy.extra.rate_limiter import RateLimiter
 | 
					from geopy.extra.rate_limiter import RateLimiter
 | 
				
			||||||
import pickle
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def fileFormat(args_inputfile):
 | 
					def check_file_format(args_inputfile):
 | 
				
			||||||
    pattern = re.compile(r'local_VIIRS_data-\d\d\d\d-\d\d-\d\d.csv')
 | 
					    pattern = re.compile(r'local_VIIRS_data-\d\d\d\d-\d\d-\d\d.csv')
 | 
				
			||||||
    if not re.match(pattern, args_inputfile):
 | 
					    if not re.match(pattern, args_inputfile):
 | 
				
			||||||
        raise argparse.ArgumentTypeError
 | 
					        raise argparse.ArgumentTypeError
 | 
				
			||||||
    return args_inputfile
 | 
					    return args_inputfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def getAdress(data_frame, date):
 | 
					def get_address(data_frame, date):
 | 
				
			||||||
    address_file = 'adressdump-' + date
 | 
					    address_file = 'adressdump-' + date
 | 
				
			||||||
    if not os.path.exists(address_file):
 | 
					    if not os.path.exists(address_file):
 | 
				
			||||||
        address_list = []
 | 
					        address_list = []
 | 
				
			||||||
@@ -45,51 +46,12 @@ def getAdress(data_frame, date):
 | 
				
			|||||||
    return address_list
 | 
					    return address_list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main(args):
 | 
					def render_map(in_ukraine, address_list, date):
 | 
				
			||||||
    date = str(dt.date.today())
 | 
					 | 
				
			||||||
    bounding = [44.184598, 52.3797464, 22.137059, 40.2275801]
 | 
					 | 
				
			||||||
    src = ('https://gibs.earthdata.nasa.gov/wmts-webmerc/VIIRS_SNPP_CorrectedReflectance_BandsM11-I2-I1/' +
 | 
					    src = ('https://gibs.earthdata.nasa.gov/wmts-webmerc/VIIRS_SNPP_CorrectedReflectance_BandsM11-I2-I1/' +
 | 
				
			||||||
           'default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpg')
 | 
					           'default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpg')
 | 
				
			||||||
    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'})
 | 
					 | 
				
			||||||
    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'))]
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if not args.noreversegeolocation:
 | 
					 | 
				
			||||||
        address_list = getAdress(in_ukraine, date)
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        address_list = []
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if not in_ukraine.empty:
 | 
					    if not in_ukraine.empty:
 | 
				
			||||||
        fire_map = folium.Map(location=in_ukraine[['latitude', 'longitude']].mean(
 | 
					        fire_map = folium.Map(location=in_ukraine[['latitude', 'longitude']].mean(
 | 
				
			||||||
        ).to_list(), zoom_start=4, max_bounds=True, crs='EPSG3857')
 | 
					        ).to_list(), zoom_start=4, max_bounds=True, crs='EPSG3857')
 | 
				
			||||||
        folium.raster_layers.TileLayer(
 | 
					 | 
				
			||||||
            tiles=src,
 | 
					 | 
				
			||||||
            subdomains='abc',
 | 
					 | 
				
			||||||
            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.fromisoformat(date) - dt.timedelta(days=1)),
 | 
					 | 
				
			||||||
            tileSize=256,
 | 
					 | 
				
			||||||
        ).add_to(fire_map)
 | 
					 | 
				
			||||||
        folium.LayerControl().add_to(fire_map)
 | 
					 | 
				
			||||||
        for r in in_ukraine.iterrows():
 | 
					        for r in in_ukraine.iterrows():
 | 
				
			||||||
            location = (r[1]['latitude'], r[1]['longitude'])
 | 
					            location = (r[1]['latitude'], r[1]['longitude'])
 | 
				
			||||||
            folium.Marker(location=location, tooltip=(
 | 
					            folium.Marker(location=location, tooltip=(
 | 
				
			||||||
@@ -97,19 +59,76 @@ def main(args):
 | 
				
			|||||||
        if address_list:
 | 
					        if address_list:
 | 
				
			||||||
            for address in address_list:
 | 
					            for address in address_list:
 | 
				
			||||||
                if address is not None:
 | 
					                if address is not None:
 | 
				
			||||||
                    location = (adress.raw['lat'], adress.raw['lon'])
 | 
					                    location = (address.raw['lat'], address.raw['lon'])
 | 
				
			||||||
                    folium.CircleMarker(location=location, tooltip=(str(adress.raw['display_name'])),
 | 
					                    folium.CircleMarker(location=location,
 | 
				
			||||||
 | 
					                                        tooltip=(
 | 
				
			||||||
 | 
					                                            str(address.raw['display_name'])),
 | 
				
			||||||
                                        radius=10).add_to(fire_map)
 | 
					                                        radius=10).add_to(fire_map)
 | 
				
			||||||
        if not os.path.exists(html_file):
 | 
					    else:
 | 
				
			||||||
            fire_map.save(html_file)
 | 
					
 | 
				
			||||||
        webbrowser.open_new(html_file)
 | 
					        fire_map = folium.Map(location=[(44.184598 + 52.3797464)/2, (22.137059 + 40.2275801)/2],
 | 
				
			||||||
 | 
					                              zoom_start=4, max_bounds=True, crs='EPSG3857')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    folium.raster_layers.TileLayer(
 | 
				
			||||||
 | 
					        tiles=src,
 | 
				
			||||||
 | 
					        subdomains='abc',
 | 
				
			||||||
 | 
					        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.fromisoformat(date) - dt.timedelta(days=1)),
 | 
				
			||||||
 | 
					        tileSize=256,
 | 
				
			||||||
 | 
					    ).add_to(fire_map)
 | 
				
			||||||
 | 
					    folium.LayerControl().add_to(fire_map)
 | 
				
			||||||
 | 
					    return fire_map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main(args):
 | 
				
			||||||
 | 
					    bounding = [44.184598, 52.3797464, 22.137059, 40.2275801]
 | 
				
			||||||
 | 
					    if args.inputfile:
 | 
				
			||||||
 | 
					        local_file = args.inputfile
 | 
				
			||||||
 | 
					        date = re.search(r'\d{4}-\d{2}-\d{2}', args.inputfile).group(0)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        date = str(dt.date.today())
 | 
				
			||||||
 | 
					        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)
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                with open(local_file, 'wb') as file:
 | 
				
			||||||
 | 
					                    file.write(data.content)
 | 
				
			||||||
 | 
					            except OSError as e:
 | 
				
			||||||
 | 
					                raise SystemExit(e)
 | 
				
			||||||
 | 
					        except requests.exceptions.RequestException as e:
 | 
				
			||||||
 | 
					            raise SystemExit(e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    html_file = local_file.split('.')[0] + '.html'
 | 
				
			||||||
 | 
					    data_frame = pd.read_csv(local_file)
 | 
				
			||||||
 | 
					    data_frame = data_frame.astype({'confidence': 'string'})
 | 
				
			||||||
 | 
					    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'))]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not args.noreversegeolocation:
 | 
				
			||||||
 | 
					        address_list = get_address(in_ukraine, date)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        address_list = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fire_map = render_map(in_ukraine, address_list, date)
 | 
				
			||||||
 | 
					    fire_map.save(html_file)
 | 
				
			||||||
 | 
					    webbrowser.open_new(html_file)
 | 
				
			||||||
    sys.exit(0)
 | 
					    sys.exit(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    parser = argparse.ArgumentParser()
 | 
					    parser = argparse.ArgumentParser()
 | 
				
			||||||
    parser.add_argument(
 | 
					    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')
 | 
					        '-i', '--inputfile', type=check_file_format,
 | 
				
			||||||
 | 
					        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',
 | 
					    parser.add_argument('-nr', '--noreversegeolocation', action='store_true',
 | 
				
			||||||
                        help='Disable reverse geolocation')
 | 
					                        help='Disable reverse geolocation')
 | 
				
			||||||
    args = parser.parse_args()
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user