Как я могу рассчитать размеры текущего региона в response-native-maps?
latitude: 38.69444432847513
latitudeDelta: 0.1288559458782288
longitude: -90.5969550254043
longitudeDelta: 0.1638044205986091
Предположим, что мой регион карты содержит данные выше (я использую onRegionChange)
Как я могу получить расстояние (диаметр) текущего региона в километрах? (ширина будет меньше высоты, потому что телефон находится в портретном режиме)
Есть ли простое преобразование, которое я могу сделать?
2 ответа
Величина расстояния с севера на юг (измеряется в градусах)
Следовательно, вы можете просто умножить latitudeDelta
от 111
получить приблизительную высоту (которая должна быть диаметром, если высота> ширина).
Если вам нужна ширина, формула немного сложнее, поскольку она зависит от широты:
longitudeDelta * 40075 * cos(latitude) / 360
Если вам нужно очень точное значение диаметра, вы можете использовать формулу Хаверсайна или формулы Винсента, которую вы можете реализовать самостоятельно или использовать модуль npm.
Два пункта для формулы будут (latitude - latitudeDelta / 2, longitude)
а также (latitude + latitudeDelta / 2, longitude)
,
Если кому-то нужно очень точное значение. Вот реализация формулы Хаверсина :
const EARTH_RADIUS = 6371000;
const { latitude, longitude, latitudeDelta } = region;
const lat = latitude * Math.PI / 180;
const latDelta = latitudeDelta * Math.PI / 180;
const diameterKm = 2 * EARTH_RADIUS * Math.atan(Math.tan(latDelta / 2) * Math.cos(lat)) / 1000;
const radius = Math.abs(Math.round(diameterKm / 2));