Download data.py from ashok2216/SkyTrack: direct link, hf CLI and curl.
- Browser
- Download file 3.78 kB
-
https://huggingface.co/spaces/ashok2216/SkyTrack/resolve/main/data.py
- Command line
-
hf download hf://spaces/ashok2216/SkyTrack/data.py
-
curl -L -o data.py https://huggingface.co/spaces/ashok2216/SkyTrack/resolve/main/data.py
3.78 kB
| '''Copyright 2024 Ashok Kumar | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License.''' | |
| import requests | |
| import json | |
| import pandas as pd | |
| import geopandas as gpd | |
| import contextily as ctx | |
| import tzlocal | |
| import pytz | |
| from PIL import Image | |
| from datetime import datetime | |
| import matplotlib.pyplot as plt | |
| from geopy.exc import GeocoderTimedOut | |
| from geopy.geocoders import Nominatim | |
| import warnings | |
| warnings.filterwarnings('ignore') | |
| from plotly.graph_objs import Marker | |
| import plotly.express as px | |
| def flight_data(flight_view_level, country, local_time_zone, flight_info, airport): | |
| geolocator = Nominatim(user_agent="flight_tracker") | |
| loc = geolocator.geocode(country) | |
| loc_box = loc[1] | |
| extend_left =+12*flight_view_level | |
| extend_right =+10*flight_view_level | |
| extend_top =+10*flight_view_level | |
| extend_bottom =+ 18*flight_view_level | |
| lat_min, lat_max = (loc_box[0] - extend_left), loc_box[0]+extend_right | |
| lon_min, lon_max = (loc_box[1] - extend_bottom), loc_box[1]+extend_top | |
| tile_zoom = 8 # zoom of the map loaded by contextily | |
| figsize = (15, 15) | |
| columns = ["icao24","callsign","origin_country","time_position","last_contact","longitude","latitude", | |
| "baro_altitude","on_ground","velocity","true_track","vertical_rate","sensors","geo_altitude", | |
| "squawk","spi","position_source",] | |
| data_url = "https://raw.githubusercontent.com/ashok2216-A/ashok_airport-data/main/data/airports.dat" | |
| column_names = ["Airport ID", "Name", "City", "Country", "IATA/FAA", "ICAO", "Latitude", "Longitude", | |
| "Altitude", "Timezone", "DST", "Tz database time zone", "Type", "Source"] | |
| airport_df = pd.read_csv(data_url, header=None, names=column_names) | |
| airport_locations = airport_df[["Name", "City", "Country", "IATA/FAA", "Latitude", "Longitude"]] | |
| airport_country_loc = airport_locations[airport_locations['Country'] == str(loc)] | |
| airport_country_loc = airport_country_loc[(airport_country_loc['Country'] == str(loc)) & (airport_country_loc['Latitude'] >= lat_min) & | |
| (airport_country_loc['Latitude'] <= lat_max) & (airport_country_loc['Longitude'] >= lon_min) & | |
| (airport_country_loc['Longitude'] <= lon_max)] | |
| url_data = ( | |
| f"https://@opensky-network.org/api/states/all?" | |
| f"lamin={str(lat_min)}" | |
| f"&lomin={str(lon_min)}" | |
| f"&lamax={str(lat_max)}" | |
| f"&lomax={str(lon_max)}") | |
| json_dict = requests.get(url_data).json() | |
| unix_timestamp = int(json_dict["time"]) | |
| local_timezone = pytz.timezone(local_time_zone) # get pytz timezone | |
| local_time = datetime.fromtimestamp(unix_timestamp, local_timezone).strftime('%Y-%m-%d %H:%M:%S') | |
| time = [] | |
| for i in range(len(json_dict['states'])): | |
| time.append(local_time) | |
| df_time = pd.DataFrame(time,columns=['time']) | |
| state_df = pd.DataFrame(json_dict["states"],columns=columns) | |
| state_df['time'] = df_time | |
| gdf = gpd.GeoDataFrame( | |
| state_df, | |
| geometry=gpd.points_from_xy(state_df.longitude, state_df.latitude), | |
| crs={"init": "epsg:4326"}, # WGS84 | |
| ) | |
| return gdf | |
| # geo_df = flight_tracking(flight_view_level = 6, country= 'India', local_time_zone='Asia/Kolkata', flight_info='baro_altitude', airport=1) | |