Вот один из возможных подходов:
Сначала вычислите минимальное расстояние с помощью функции Хаверсайна.
Добавьте это в качестве вычисляемого столбца в таблицу Tracked
.
Nearest =
MINX(Stadiums,
ROUND(2 * 3959 *
ASIN(SQRT(
SIN((Stadiums[Lat] - Tracked[Lat]) * PI()/360)^2 +
COS(Tracked[Lat] * PI()/180) * COS(Stadiums[Lat] * PI()/180) *
SIN((Stadiums[Lon] - Tracked[Lon]) * PI()/360)^2)), 1))
В этой формуле 3959
- радиус Земли в милях.
Теперь мы можем подбирать расстояния, чтобы найти ближайший стадион:
Stadium = CALCULATE(MAX(Stadiums[Stadium]),
FILTER(Stadiums,
ROUND(2 * 3959 *
ASIN(SQRT(
SIN((Stadiums[Lat] - Tracked[Lat]) * PI()/360)^2 +
COS(Tracked[Lat] * PI()/180) * COS(Stadiums[Lat] * PI()/180) *
SIN((Stadiums[Lon] - Tracked[Lon]) * PI()/360)^2)), 1)
= Tracked[Nearest]))
Примечание : я округлил значения, чтобы избежать несоответствия из возможных ошибок с плавающей запятой.Это может или не может быть необходимым.