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

Проблема в том, что прямая конвертация часто приводит к потере данных: исчезают метки времени, искажаются координаты или пропадают атрибуты точек. В этой статье мы разберём уникальные нюансы преобразования KML в GPX для разных типов данных (линии, полигоны, точки), сравним 10 инструментов (включая офлайн-решения для Windows/macOS/Linux) и покажем, как избежать типичных ошибок, например, с кодировкой UTF-8 или дублированием координат.

Почему GPX лучше KML для навигационных устройств

Формат GPX изначально разрабатывался для обмена данными между GPS-приёмниками, поэтому он оптимизирован для:

  • 📍 Точности координат: поддерживает до 10 знаков после запятой (в KML обычно 6–7).
  • ⏱️ Временных меток: фиксирует время прохождения каждой точки трека (критично для анализа скорости).
  • 🚴 Совместимости: работает с Garmin, Suunto, OsmAnd, Locus Map и др.
  • 📊 Атрибутов точек: позволяет хранить высоту, температуру, частоту сердечных сокращений (если данные есть в исходном KML).

В то же время KML больше подходит для визуализации: он поддерживает стили отображения (цвета линий, иконки меток), но не всегда корректно интерпретируется навигационными устройствами. Например, Garmin Edge 1040 игнорирует KML-файлы с вложенными папками, а OsmAnd может не показывать описания точек.

⚠️ Внимание: Если ваш KML-файл содержит полигоны (например, границы заповедника), при конвертации в GPX они превратятся в набор точек без связи между ними. Для сохранения полигонов используйте промежуточный формат SHP или инструменты вроде QGIS.

Способы конвертации KML в GPX: сравнение инструментов

Выбор метода зависит от объёма данных, необходимости сохранения атрибутов и вашей операционной системы. Ниже — сравнительная таблица популярных решений:

Инструмент Тип Сохраняет временные метки Поддерживает полигоны Ограничения
GPSVisualizer Онлайн Да Нет (только точки/линии) Файлы до 5 МБ
GPSBabel Офлайн (Windows/macOS/Linux) Да Частично (разбивает на точки) Сложный интерфейс командной строки
MyGeodata Converter Онлайн Нет Да (конвертирует в WKT) Платная версия для файлов >10 МБ
QGIS Офлайн (десктоп) Да (при ручной настройке) Да Требует навыков работы с GIS
GPSies Онлайн Да Нет Ограничение 3 файлов в день

Для большинства пользователей оптимальным решением станет GPSVisualizer (для простых треков) или GPSBabel (для продвинутых задач). Если же нужно сохранить полигоны, придётся использовать QGIS или конвертировать KML в SHP, а затем в GPX через OGR2OGR.

📊 Какой инструмент вы используете для работы с GPS-данными?
  • Google Earth
  • Garmin BaseCamp
  • OsmAnd
  • QGIS
  • Другой

Пошаговая инструкция: конвертация через GPSVisualizer

Этот метод подходит для треков и точек интереса (POI) без полигонов. Следуйте алгоритму:

  1. Перейдите на сайт GPSVisualizer.
  2. В разделе Input загрузите ваш KML-файл (drag-and-drop или через кнопку Browse).
  3. В разделе Output выберите формат GPX.
  4. В Options отметьте:
    • Include elevation data (если нужна высота).
    • Preserve track/route names (сохранит названия треков).
    • ❌ Снимите Simplify track (чтобы не терять точки).
  • Нажмите Convert и скачайте результат.
  • ☑️ Проверка результата конвертации

    Выполнено: 0 / 4

    Если в результате отсутствуют временные метки, значит, в исходном KML они не были прописаны в теге <TimeStamp>. В этом случае можно добавить их вручную через GPSBabel с параметром -x track,merge,start=20260101T000000Z (замените дату на актуальную).

    GPSBabel: конвертация через командную строку

    GPSBabel — самый мощный инструмент для работы с GPS-данными, но его интерфейс командной строки пугает новичков. Ниже — базовые команды для разных задач:

    1. Простая конвертация KML в GPX:

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

    2. Конвертация с сохранением высоты и времени:

    gpsbabel -i kml -f input.kml -x track,pack -o gpx,gpxver=1.1 -F output.gpx

    3. Объединение нескольких KML в один GPX:

    gpsbabel -i kml -f file1.kml -f file2.kml -o gpx -F merged.gpx
    ⚠️ Внимание: Если ваш KML содержит кириллические символы в названиях точек, добавьте параметр -c UTF-8, иначе в GPX они превратятся в кракозябры. Пример:
    gpsbabel -i kml -f "путь с русскими символами.kml" -c UTF-8 -o gpx -F output.gpx

    Для Windows пользователей есть графическая оболочка GPSBabel GUI, которую можно скачать с официального сайта. Она упрощает настройку параметров, но не поддерживает все функции командной строки (например, фильтрацию по времени).

    💡

    Если GPSBabel выдаёт ошибку "No valid data found", проверьте KML-файл на наличие тегов с координатами. Пустые метки или слои без геоданных могут блокировать конвертацию.

    Обработка сложных KML: полигоны, стили, вложенные папки

    Если ваш KML содержит:

    • 🔹 Полигоны (например, границы водоёмов),
    • 🎨 Стили (цвета линий, иконки меток),
    • 📁 Вложенные папки (группы точек),

    то стандартные конвертеры не справятся. Вам понадобится QGIS (бесплатная GIS-программа) или OGR2OGR (утилита из пакета GDAL).

    Инструкция для QGIS:

    1. Импортируйте KML через Слой → Добавить слой → Добавить векторный слой.
    2. Если полигоны отображаются как линии, кликните правой кнопкой по слою → Сохранить как → выберите формат ESRI Shapefile.
    3. Откройте новый SHP-файл и экспортируйте его в GPX через Вектор → Геообработка → Конвертировать формат.

    Для OGR2OGR используйте команду:

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

    Этот метод сохраняет атрибуты точек (например, описания или высоту), но требует установки GDAL. На Windows проще использовать OSGeo4W — дистрибутив с графическим установщиком.

    Что делать, если GPX не открывается в навигаторе?

    Проверьте, что файл сохранён в кодировке UTF-8 (откройте в Notepad++ и посмотрите в строке состояния).|Убедитесь, что теги содержат атрибуты lat и lon (пример: ).|Если устройство не видит трек, попробуйте разбить его на сегменты по 500 точек (через GPSBabel с параметром -x track,split=500).

    Типичные ошибки и как их избежать

    Даже при использовании проверенных инструментов конвертация может пойти не по плану. Вот самые распространённые проблемы и их решения:

    Ошибка Причина Решение
    В GPX нет временных меток В KML отсутствует тег <TimeStamp> или <time> Добавьте время вручную через GPSBabel с параметром -x track,merge,start=YYYYMMDDTHHMMSSZ
    Координаты сдвинуты KML использует систему координат, отличную от WGS84 (например, EPSG:3857) Перепроецируйте данные в QGIS или добавьте параметр -t в GPSBabel
    Файл не открывается в Garmin GPX версии 1.0 (устаревшая) Конвертируйте в GPX 1.1 через gpsbabel -o gpx,gpxver=1.1
    Пропали названия точек Кодировка файла не UTF-8 Пересохраните KML в UTF-8 через Notepad++ перед конвертацией

    Если после конвертации трек в навигаторе отображается "зигзагами", проверьте:

    • 📏 Частоту точек: если в KML точки расположены слишком далеко друг от друга (например, раз в 500 метров), GPX может интерполировать путь некорректно. Используйте параметр -x track,interpolate,distance=10m в GPSBabel для добавления промежуточных точек.
    • 🌍 Систему координат: некоторые KML-файлы из Google My Maps сохраняются в EPSG:4326 (WGS84), но с округлёнными координатами. Это приводит к "ступенькам" на треке.
    💡

    Для максимальной точности конвертации всегда проверяйте исходный KML на наличие тегов с достаточным количеством знаков после запятой (минимум 6 для широты/долготы).

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

    Если вам нужно регулярно конвертировать десятки KML-файлов, ручные методы не подойдут. Ниже — примеры скриптов для разных ОС.

    Bash-скрипт для Linux/macOS (использует GPSBabel):

    #!/bin/bash
    

    for file in *.kml; do

    gpsbabel -i kml -f "$file" -o gpx -F "${file%.kml}.gpx"

    done

    Batch-файл для Windows:

    @echo off
    

    for %%f in (*.kml) do (

    gpsbabel -i kml -f "%%f" -o gpx -F "%%~nf.gpx"

    )

    Для обработки файлов с кириллическими именами в Windows добавьте в начало batch-файла строку:

    chcp 65001

    Если вам нужно не только конвертировать, но и фильтровать данные (например, оставлять только треки длиннее 1 км), используйте Python с библиотекой gpxpy:

    import gpxpy
    

    import gpxpy.gpx

    with open('input.gpx', 'r') as gpx_file:

    gpx = gpxpy.parse(gpx_file)

    for track in gpx.tracks:

    if track.length_3d() > 1000: # 1 км

    with open('filtered.gpx', 'w') as f:

    f.write(gpx.to_xml())

    Для запуска Python-скрипта потребуется установить библиотеку:

    pip install gpxpy

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

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

    Технически да, но есть нюансы:

    • Временные метки в GPX превратятся в теги <TimeStamp> в KML, но не все программы их поддерживают.
    • Стили отображения (цвета, толщина линий) придётся настраивать вручную в Google Earth.
    • Полигоны, разбитые на точки в GPX, не восстановятся автоматически.

    Для обратной конвертации используйте ту же команду GPSBabel, поменяв форматы местами:

    gpsbabel -i gpx -f input.gpx -o kml -F output.kml
    Почему после конвертации трек в OsmAnd отображается не полностью?

    Это типичная проблема с ограничением количества точек. OsmAnd может не показывать треки с более чем 2000 точками. Решения:

    1. Разбейте трек на сегменты по 1500 точек:
    2. gpsbabel -i gpx -f input.gpx -x track,split=1500 -o gpx -F output_split.gpx
    3. Упростите трек, оставив ключевые точки:
    4. gpsbabel -i gpx -f input.gpx -x simplify,count=1000 -o gpx -F output_simple.gpx
    Как конвертировать KML в GPX на Android без компьютера?

    Используйте приложение GPS Logger или OsmAnd:

    1. Скачайте KML-файл на телефон (например, через Google Диск).
    2. Откройте его в OsmAnd (поддерживает импорт KML).
    3. Экспортируйте в GPX через Меню → Экспорт → GPX.

    Для автоматизации попробуйте GPX Tools (доступен в Google Play). Приложение позволяет конвертировать файлы прямо на устройстве, но имеет ограничение на размер файла (до 10 МБ).

    Какая максимальная точность координат поддерживается в GPX?

    Согласно спецификации GPX 1.1, координаты могут храниться с точностью до 10 знаков после запятой, что соответствует:

    • ~1.1 мм на экваторе (для широты/долготы).
    • ~0.1 мм для высоты (если указана в метрах).

    Однако большинство GPS-приёмников (включая Garmin или Suunto) используют 6–7 знаков, что даёт точность ~10 см. Более высокие значения имеют смысл только для специализированных задач (например, геодезии).

    Можно ли конвертировать KML с 3D-моделями (например, зданиями) в GPX?

    Нет, GPX не поддерживает 3D-объекты. Этот формат предназначен только для:

    • Точек (waypoints),
    • Треков (tracks),
    • Маршрутов (routes).

    Для 3D-данных используйте форматы COLLADA (.dae) или glTF, но они не совместимы с большинством навигационных устройств. Альтернатива — экспорт в KMZ (сжатый KML) с сохранением текстур.