Реализуйте калькулятор географических расстояний с использованием TypeScript

При разработке образовательных игр важно предоставлять точную и содержательную обратную связь для привлечения пользователей. В этой статье я поделюсь, как мы реализовали географическую систему расчетов для Flagle Explorer, игры на угадывание флагов, которая помогает пользователям изучать мировую географию через интерактивную обратную связь.

Техническое испытание

Наши основные требования были:

  1. Точные расчеты расстояний между любыми двумя точками на Земле
  2. Точные расчеты направлений для навигационного руководства
  3. Нормализованная оценка близости
  4. Работа в реальном времени для моментальной обратной связи

Детали реализации

1. Основная структура данных

Сначала мы определили интерфейс нашей базовой географической точки:

TypeScript

 

2. Реализация расчета расстояний

Мы реализовали формулу Хаверсина для расчета расстояний по великому кругу:

TypeScript

 

3. Система расчета подшипников

Мы разработали сложный расчет подшипников, который преобразует сложные угловые математические вычисления в понятные направленные индикаторы:

TypeScript

 

4. Картографирование направлений для удобства пользователя

Для упрощения расчетов подшипников мы отображаем их с помощью направленных эмодзи:

TypeScript

 

Рассмотрение производительности

  1. Ранние возвраты: Мы используем ранние возвраты для идентичных точек, чтобы избежать ненужных вычислений.
  2. Оптимизация постоянных величин: Радиус Земли и преобразования градусов в радианы предварительно рассчитываются.
  3. Контроль точности: Числа округляются до соответствующего количества десятичных знаков для балансировки точности и производительности.

Обработка ошибок и крайних случаев

Наша реализация обрабатывает несколько крайних случаев:

  • Идентичные точки
  • Антиподальные точки
  • Точки на полюсах
  • Расчеты через датовую линию

Стратегия тестирования

Мы провели всесторонние тесты, охватывающие:

  1. Известные расчеты расстояний между крупными городами
  2. Граничные случаи на полюсах и международной линии перемены дат
  3. Расчеты направлений для кардинальных и междукардинальных точек
  4. Показатели производительности для обратной связи в реальном времени

Прикладное применение в реальном мире

Эта система успешно внедрена в Flagle Explorer, обрабатывая тысячи расчетов ежедневно с:

  • Средним временем ответа < 5 мс
  • Точностью 99,99% по сравнению с эталонными расчетами
  • Отсутствием сообщенных ошибок, связанных с расчетами, в производстве

Будущие оптимизации

Мы исследуем несколько улучшений:

  1. Реализация WebAssembly для сложных расчетов
  2. Кэширование часто используемых маршрутов
  3. Пакетная обработка для многоточечных расчетов
  4. Интеграция с данными об высоте местности

Заключение

Построение географической системы расчетов требует тщательного внимания к математической точности, оптимизации производительности и пользовательскому опыту. Наша реализация на TypeScript успешно учитывает эти факторы, сохраняя читаемость кода и удобство обслуживания.

Хотите увидеть эти расчеты в действии? Вы можете попробовать их в действии в Flagle Explorer и увидеть, как индикаторы расстояния и направления помогут вам ориентироваться по глобальной географии!

Репозиторий кода

Полная реализация доступна на нашем GitHub. Вот краткое руководство по началу работы:

Plain Text

 

Эта реализация доказала свою надежность в производстве, обрабатывая миллионы расчетов и при этом поддерживая высокие стандарты производительности и точности.

Source:
https://dzone.com/articles/geographic-distance-calculator-using-typescript