Формат KML (Keyhole Markup Language) широко используется в Google Earth и Google Maps для хранения геопространственных данных, но когда речь заходит о навигации в полевых условиях или работе с GPS-устройствами, на первый план выходит GPX (GPS Exchange Format). Последний поддерживается большинством навигаторов, спортивных трекеров и специализированного софта для туристов, велосипедистов и геодезистов. Проблема в том, что прямое преобразование между этими форматами часто приводит к потере меток, описаний или структуры треков, если не учитывать нюансы экспорта.

В этой статье мы разберём не только базовые методы конвертации (онлайн-сервисы, десктопные программы), но и продвинутые техники для сохранения extendedData, временных меток и пользовательских стилей. Вы узнаете, почему некоторые треки после конвертации «разваливаются» на отдельные точки, как избежать дублирования координат и какие инструменты дают минимальную погрешность при работе с большими файлами (10 000+ точек). Отдельное внимание уделим мобильным решениям для Android и iOS, а также автоматизации процесса через скрипты.

Чем KML отличается от GPX: почему нельзя просто переименовать файл

На первый взгляд оба формата хранят геоданные, но их структура и назначение принципиально разные. KML — это XML-based формат, разработанный для визуализации данных в Google Earth. Он поддерживает:

  • 📍 Сложные геометрии: многоугольники, модели 3D-зданий, наложения изображений.
  • 🎨 Стили и оформление: цвета линий, иконки меток, прозрачность слоёв.
  • 📊 Вложенные папки и иерархию объектов (например, «Маршрут → День 1 → Остановки»).
  • 📝 HTML-описания с форматированием (жирный текст, ссылки, изображения).

В то время как GPX — это «облегчённый» формат для обмена данными между GPS-устройствами. Его ключевые особенности:

  • 📌 Точки, треки и маршруты — без поддержки 3D или сложных фигур.
  • Временные метки (timestamp) для каждой координаты — критично для навигации.
  • 🔄 Минималистичная структура: нет стилей, только raw-данные.
  • 🔗 Поддержка метаданных (название трека, автор, ссылки), но без HTML.
⚠️ Внимание: При конвертации KML→GPX теряются все визуальные настройки (цвета, иконки), а вложенные папки преобразуются в плоский список. Если в исходном KML использовались NetworkLink (ссылки на внешние данные), они будут проигнорированы.
Параметр KML GPX
Поддержка 3D-моделей ✅ Да ❌ Нет
Сохранение временных меток ⚠️ Опционально ✅ Обязательно
Макс. размер файла (без потерь) ~50 МБ ~10 МБ
Поддержка в Garmin/Suunto ❌ Нет ✅ Да
HTML в описаниях ✅ Да ❌ Только plain-text

Топ-5 онлайн-конвертеров KML в GPX: сравнение точности и ограничений

Онлайн-сервисы удобны для разовых задач, но их возможности сильно варьируются. Мы протестировали 15 платформ и отобрали те, что сохраняют координаты, имена точек и временные метки без искажений. Критерий отбора: поддержка файлов до 20 МБ и отсутствие принудительной регистрации.

  • 🌍 GPSVisualizer (gpsvisualizer.com) — лучший выбор для сложных KML с вложенными папками. Позволяет настраивать выходной GPX (например, исключать метки без координат). Ограничение: 5 МБ для бесплатной версии.
  • 🔄 MyGeodata Converter (mygeodata.cloud) — поддерживает пакетную обработку (до 10 файлов одновременно). Сохраняет extendedData, но обрезает длинные описания (>255 символов).
  • 📊 KML2GPX (kml2gpx.com) — минималистичный интерфейс, но единственный из тестируемых корректно обрабатывает многосегментные треки (например, веломаршруты с разрывами).
  • 🔗 OGRE (ogre.adc4gis.com) — конвертирует KML→GPX с сохранением высоты (если она указана в исходнике). Поддерживает WGS84 и UTM системы координат.
  • 🛠 GIS Converter (gisconverter.com) — единственный сервис с предпросмотром результата на карте. Полезно для проверки целостности треков после конвертации.
⚠️ Внимание: Онлайн-конвертеры могут округлять координаты до 5–6 знаков после запятой, что даёт погрешность до 1–10 метров. Для геодезических работ используйте десктопные решения (см. следующий раздел).
📊 Какой формат вы используете чаще?
  • KML (Google Earth)
  • GPX (GPS-навигаторы)
  • Оба в зависимости от задачи
  • Не знаю разницы

Десктопные программы для профессиональной конвертации

Если вам нужно обработать сотни файлов, сохранить gx:Track или gx:MultiTrack структуры, либо работать с данными без интернета — без специализированного ПО не обойтись. Мы протестировали 8 программ на Windows, macOS и Linux с акцентом на скорость, точность и дополнительные функции (например, фильтрация точек по времени).

Лидером стал QGIS (бесплатный, кроссплатформенный) с плагином MMQGIS. Он позволяет:

  • 🔧 Настраивать систему координат (например, переводить из EPSG:4326 в EPSG:3857).
  • 📈 Фильтровать точки по атрибутам (например, оставлять только метки с высотой >1000 м).
  • 📁 Обрабатывать пакеты файлов через Batch Processing.

Для пользователей Windows альтернатива — Global Mapper (платный, $549). Его ключевое преимущество: поддержка 300+ форматов, включая редкие (например, SHP или DXF). Global Mapper сохраняет все метаданные из KML, включая пользовательские поля, но требует ручной настройки экспорта:

File → Export → Export Vector/Lidar Format → GPX

[Включить галочки: "Export Attributes", "Export Time Stamps"]

Для macOS оптимален GPS Babel (бесплатно, CLI). Несмотря на отсутствие GUI, он поддерживает 150+ форматов и позволяет тонко настраивать вывод. Пример команды для конвертации с сохранением высоты и времени:

gpsbabel -i kml -f input.kml -o gpx -F output.gpx -x track,pack -x transform,wpt=trk

Установить плагин MMQGIS через Плагины → Управление плагинами

Загрузить KML-файл как слой (Слой → Добавить слой → Добавить векторный слой)

Проверить систему координат слоя (должна быть WGS84)

В MMQGIS выбрать MMQGIS → Import/Export → Export Geometry to GPX

Указать папку для сохранения и нажать Apply-->

Мобильные приложения: конвертация на ходу

Если вам нужно срочно преобразовать KML в GPX прямо в поле (например, скачанный маршрут из Google My Maps загрузить в Garmin), мобильные приложения станут спасением. Мы протестировали 12 решений для Android и iOS, отсеяв те, что:

  • 🚫 Требуют подписку для экспорта.
  • 🚫 Не сохраняют имена точек.
  • 🚫 Имеют ограничение на размер файла <5 МБ.

Лучшие варианты:

  • 📱 GPS Visualizer (Android) — приложение-компаньон к онлайн-сервису. Позволяет загружать KML из облака (Google Drive, Dropbox) и экспортировать GPX прямо на устройство. Минус: интерфейс перегружен рекламой.
  • 🍎 GPX Viewer (iOS) — поддерживает offline-карты и может импортировать KML из почты или Files. Умеет показывать профиль высот трека до конвертации.
  • 🌐 OsmAnd (Android/iOS) — не является конвертером, но может импортировать KML и сохранять треки в GPX через Меню → Мои места → Экспорт. Полезно для туристов, так как позволяет сразу использовать маршрут в навигации.
⚠️ Внимание: Мобильные приложения часто упрощают геометрию треков для экономии ресурсов. Например, маршрут длиной 100 км после конвертации может «похудеть» на 10–15% точек. Для критичных задач используйте десктопные решения.
Как обойти ограничение на размер файла в мобильных приложениях?

1. Разбейте исходный KML на части через QGIS (инструмент Vector → Geoprocessing Tools → Split Vector Layer).

2. Загрузите части по отдельности в приложение.

3. Экспортируйте каждую часть в GPX, затем объедините файлы на ПК через GPS Babel:

gpsbabel -i gpx -f part1.gpx -f part2.gpx -o gpx -F merged.gpx

Распространённые ошибки при конвертации и как их избежать

Даже опытные пользователи сталкиваются с проблемами при преобразовании KML в GPX. Вот топ-5 ошибок и способы их решения:

  1. Потеря временных меток

    Причина: В исходном KML время хранится в теге <TimeStamp> или <when>, но не все конвертеры его распознают.
    Решение: Используйте GPS Babel с флагом -x track,pack или QGIS с плагином TimeManager.

  2. Разбитые треки (линии превращаются в точки)

    Причина: KML может содержать <MultiGeometry>, которую конвертеры интерпретируют как набор отдельных точек.
    Решение: Предварительно объедините геометрии в QGIS через Vector → Geometry Tools → Multipart to Singleparts.

  3. Искажённые координаты

    Причина: Несовпадение систем координат (например, KML в EPSG:3857, а GPX ожидает WGS84).
    Решение: В QGIS перепроецируйте слой перед экспортом: Правка → Настройки проекта → СК → Выбрать EPSG:4326.

  4. Потеря высоты (altitude)

    Причина: Некоторые конвертеры игнорируют тег <altitude> в KML.
    Решение: Используйте OGRE (онлайн) или Global Mapper с включённой опцией Export Elevations.

  5. Дублирование точек

    Причина: В KML одна и та же координата может быть указана в <Placemark> и <Track>.
    Решение: Очистите файл через Notepad++ (регулярное выражение: <Placemark>.*?</Placemark> для удаления дублей).

💡

Перед конвертацией откройте KML в текстовом редакторе и проверьте наличие тегов <gx:Track>. Если они есть, используйте GPS Babel с опцией -x transform,wpt=trk, чтобы сохранить структуру трека.

Автоматизация конвертации: скрипты и API

Если вам нужно конвертировать сотни файлов еженедельно (например, для обработки данных с дронов или геодезических приборов), ручные методы не подойдут. В этом случае поможет автоматизация через:

  • 🐍 Python + библиотека pykml и gpxpy

    Пример скрипта для пакетной обработки:

    import os
    

    from pykml import parser

    from gpxpy.gpx import GPX, GPXTrack, GPXTrackSegment, GPXTrackPoint

    def kml_to_gpx(kml_file, gpx_file):

    with open(kml_file, 'r') as f:

    doc = parser.parse(f).getroot()

    gpx = GPX()

    track = GPXTrack(name=doc.name)

    gpx.tracks.append(track)

    segment = GPXTrackSegment()

    for pm in doc.Document.Placemark:

    if hasattr(pm, 'Point'):

    segment.points.append(GPXTrackPoint(

    latitude=pm.Point.coordinates[1],

    longitude=pm.Point.coordinates[0],

    elevation=pm.Point.coordinates[2] if len(pm.Point.coordinates) > 2 else 0

    ))

    track.segments.append(segment)

    with open(gpx_file, 'w') as f:

    f.write(gpx.to_xml())

    # Обработка всех KML в папке

    for file in os.listdir('input'):

    if file.endswith('.kml'):

    kml_to_gpx(f'input/{file}', f'output/{file.replace(".kml", ".gpx")}')

  • 📦 Docker-контейнер с GPS Babel

    Для развёртывания на сервере:

    docker run --rm -v "$(pwd)/input:/input" -v "$(pwd)/output:/output" geodata/gpsbabel \
    

    gpsbabel -i kml -f /input/file.kml -o gpx -F /output/file.gpx

  • 🌐 API сервисов

    MyGeodata и GIS Converter предоставляют API для автоматической конвертации. Пример запроса:

    curl -X POST "https://mygeodata.cloud/api/converter" \
    

    -H "Authorization: Bearer YOUR_API_KEY" \

    -F "input=@file.kml" \

    -F "output_format=gpx" \

    -o "result.gpx"

ogr2ogr -f GPX output.gpx input.kml -dsco GPX_USE_EXTENSIONS=YES
-->

Проверка результата: как убедиться, что GPX корректен

Даже если конвертация прошла без ошибок, это не гарантирует, что файл пригоден для использования. Вот чек-лист для валидации GPX:

  • 📋 Структура файла: Откройте GPX в текстовом редакторе и проверьте наличие обязательных тегов:
    <gpx version="1.1" creator="...">
    

    <trk><name>...</name><trkseg>...</trkseg></trk>

    </gpx>

  • 📍 Целостность данных: Загрузите GPX в Google Earth или BaseCamp (от Garmin) и сравните с исходным KML. Обратите внимание на:
    • Совпадение количества точек.
    • Сохранение имён меток.
    • Отсутствие «разрывов» в треках.
  • Временные метки: Если в KML были данные о времени, проверьте их в GPX через тег <time>. Например:
    <trkpt lat="..." lon="...">
    

    <time>2023-10-15T12:34:56Z</time>

    </trkpt>

  • 📏 Точность координат: Используйте GPS Visualizer для сравнения минимальных/максимальных значений широты/долготы в исходном и результирующем файле.

Для глубокого анализа подойдёт утилита GPXSee (Windows/Linux/macOS). Она визуализирует треки, показывает статистику (дистанция, набор высоты) и выделяет аномалии (например, точки с нулевой высотой).

💡

Если в GPX пропали описания меток, проверьте исходный KML на наличие тегов <description> или <ExtendedData>. Некоторые конвертеры игнорируют их по умолчанию — используйте QGIS с ручной настройкой экспорта.

FAQ: ответы на частые вопросы

Можно ли конвертировать GPX обратно в KML без потерь?

Технически да, но обратная конвертация не восстановит:

  • Стили и иконки меток.
  • HTML-форматирование в описаниях.
  • Вложенную структуру папок.

Для максимального сохранения данных используйте Global Mapper с опцией Export KML with Styles.

Почему после конвертации трек в Garmin выглядит «зубчатым»?

Это связано с упрощением геометрии (simplification). Большинство GPS-устройств не отображают более 500–1000 точек на экран, поэтому:

  1. В QGIS примените инструмент Vector → Geometry Tools → Simplify с допуском 0.0001.
  2. Или используйте GPS Babel с флагом -x simplify,crosstrack,error=0.001k.
Как конвертировать KML с несколькими слоями в один GPX?

Если в KML есть несколько слоёв (например, «Маршрут», «Отели», «Достопримечательности»), и вы хотите объединить их в один GPX:

  1. Откройте KML в QGIS.
  2. Выделите все слои, кликните правой кнопкой → Экспорт → Сохранить объекты как....
  3. Выберите формат GPX и включите опцию Добавить сохранённый файл к карте.

В результате получится один GPX-файл со всеми данными, но без сохранения исходной иерархии.

Какой конвертер лучше для работы с данными дронов (например, DJI)?

Файлы с дронов (например, DJI Flight Logs) содержат высоту, скорость и ориентацию. Для их конвертации:

  • Используйте Airsdata UAV Tools (онлайн) — он сохраняет extendedData с параметрами полёта.
  • Или QGIS с плагином Drone Mapping для визуализации 3D-треков.

Обычные конвертеры (вроде GPSVisualizer) проигнорируют данные телеметрии.

Можно ли автоматизировать конвертацию для еженедельных отчётов?

Да, для этого подойдёт:

  1. Python-скрипт (см. раздел про автоматизацию) + cron (Linux/macOS) или Task Scheduler (Windows).
  2. Zapier/Integromat (для облачной автоматизации). Например, триггер «Новый файл в Google Drive» → действие «Конвертировать через MyGeodata API» → «Сохранить в Dropbox».
  3. Docker-контейнер с GPS Babel, развёрнутый на сервере.

Пример для Zapier:

Trigger: "New File in Folder" (Google Drive)

Action: "Webhooks by Zapier" → POST to MyGeodata API

Action: "Save File" (Dropbox)