spb/wp5_uqo Public
UQO Working Paper No. 5 — Airbnb, residential rents and housing market pressure.
TeX 53.4%
Python 46.5%
1# Author: Simon-Pierre Boucher — contact@spboucher.ai2"""Geospatial helpers."""34import numpy as np56from src.config import EARTH_RADIUS_KM789def haversine_matrix(lat1, lon1, lat2, lon2):10 """11 Vectorised Haversine distance between every pair (i, j) where12 i indexes lat1/lon1 and j indexes lat2/lon2.1314 Parameters15 ----------16 lat1, lon1 : np.ndarray, shape (n,)17 lat2, lon2 : np.ndarray, shape (m,)1819 Returns20 -------21 dist : np.ndarray, shape (n, m) — distances in kilometres22 """23 lat1 = np.radians(lat1)[:, None]24 lon1 = np.radians(lon1)[:, None]25 lat2 = np.radians(lat2)[None, :]26 lon2 = np.radians(lon2)[None, :]2728 dlat = lat2 - lat129 dlon = lon2 - lon13031 a = np.sin(dlat / 2.0) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2.0) ** 232 c = 2.0 * np.arcsin(np.sqrt(a))33 return EARTH_RADIUS_KM * c34