SkyTrack / data.py
ashok2216's picture
Upload data.py
ed62562 verified
raw
history blame
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)