Files
distance-to-city/citydist.py
2026-02-16 15:23:33 -08:00

33 lines
1.3 KiB
Python

import numpy as np
import pandas as pd
from pyproj import Geod
def closest_satalite_measurement(point, df=None):
if df is None:
df = pd.read_csv("oco2.csv", index_col=0)
geod = Geod(ellps="WGS84")
pos = df.apply(lambda row: geod.inv(point[1], point[0], row["Longitude"], row["Latitude"]), axis=1)
distances = pos.apply(lambda row: row[2])
min_index = distances.idxmin()
measurement = df.loc[min_index]
return dict(measurement)
def closest_city(point, df=None, population_threshold=0):
"""Get the name, population, and distance to the point of the closest city"""
if df is None:
df = pd.read_csv("africapolis.csv", index_col=0)
df = df[df["Population"] > population_threshold]
geod = Geod(ellps="WGS84")
pos = df.apply(lambda row: geod.inv(point[1], point[0], row["Longitude"], row["Latitude"]), axis=1)
fwd_azimuth, distances = pos.apply(lambda row: row[0]), pos.apply(lambda row: row[2])
min_index = distances.idxmin()
city = df.loc[min_index]
return {
"name": city["Name"],
"population": np.int64(city["Population"]),
"distance": np.float64(distances[min_index]),
"location": (city["Latitude"], city["Longitude"]),
"fwd_azimuth": fwd_azimuth[min_index],
}