Что такое широта
Что проверяют
Вопрос звучит по-школьному, но в питоновской вакансии он почти всегда приходит из геосервисов. Интервьюер хочет понять, работали ли вы с координатами руками: знаете ли диапазоны, знаки и порядок пары. Заодно видно, умеет ли кандидат отвечать коротко и точно на простое, а не разводить воду.
Как отвечать
Широта это угол между плоскостью экватора и направлением на точку: ноль на экваторе, девяносто градусов на полюсе. Значение знаковое, север положительный, юг отрицательный, либо рядом ставится буква полушария. Вторая координата, долгота, отсчитывается от начального меридиана и доходит до ста восьмидесяти градусов в обе стороны.
Дальше стоит показать, что вы имели дело с этим в коде:
from math import radians, sin, cos, asin, sqrt
def distance_km(lat1, lon1, lat2, lon2):
dlat, dlon = radians(lat2 - lat1), radians(lon2 - lon1)
a = sin(dlat / 2) ** 2 + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon / 2) ** 2
return 2 * 6371.0 * asin(sqrt(a))Полезные факты в довесок: градус широты почти везде одной длины, градус долготы сжимается к полюсам и там схлопывается в точку; хранят координаты в числах двойной точности или отдельным географическим типом, а не строкой.
Где спотыкаются
Путают порядок пары. В GeoJSON и в shapely первой идёт долгота, в geopy и в привычной записи на карте первой стоит широта. Перепутанные числа не дают ошибки, точка просто уезжает в другую часть света, и баг находят по жалобе пользователя.
Считают расстояние теоремой Пифагора прямо в градусах. По широте это ещё как-то работает, по долготе ошибка растёт к полюсам. Для коротких расстояний берут формулу гаверсинуса, для длинных геодезическую по эллипсоиду.
Теряют точность при хранении и сравнении: кладут в одинарную точность, округляют до пары знаков, а потом ищут точку по равенству. Координаты сравнивают с допуском или через пространственный индекс, точного совпадения по числам у реальных измерений не бывает.