SPB Git

spb/wp5_uqo Public

UQO Working Paper No. 5 — Airbnb, residential rents and housing market pressure.

TeX 53.4% Python 46.5%
872 B · 34 lines python
Raw Blame History
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