Формат 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.
- Google Earth
- Garmin BaseCamp
- OsmAnd
- QGIS
- Другой
Пошаговая инструкция: конвертация через GPSVisualizer
Этот метод подходит для треков и точек интереса (POI) без полигонов. Следуйте алгоритму:
- Перейдите на сайт GPSVisualizer.
- В разделе
Inputзагрузите ваш KML-файл (drag-and-drop или через кнопкуBrowse). - В разделе
Outputвыберите форматGPX. - В
Optionsотметьте:- ✅
Include elevation data(если нужна высота). - ✅
Preserve track/route names(сохранит названия треков). - ❌ Снимите
Simplify track(чтобы не терять точки).
- ✅
Convert и скачайте результат.☑️ Проверка результата конвертации
Если в результате отсутствуют временные метки, значит, в исходном 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:
- Импортируйте KML через
Слой → Добавить слой → Добавить векторный слой. - Если полигоны отображаются как линии, кликните правой кнопкой по слою →
Сохранить как→ выберите форматESRI Shapefile. - Откройте новый
SHP-файл и экспортируйте его в GPX черезВектор → Геообработка → Конвертировать формат.
Для OGR2OGR используйте команду:
ogr2ogr -f GPX output.gpx input.kml -dsco GPX_USE_EXTENSIONS=TRUE
Этот метод сохраняет атрибуты точек (например, описания или высоту), но требует установки GDAL. На Windows проще использовать OSGeo4W — дистрибутив с графическим установщиком.
Что делать, если GPX не открывается в навигаторе?
Проверьте, что файл сохранён в кодировке UTF-8 (откройте в Notepad++ и посмотрите в строке состояния).|Убедитесь, что теги
Типичные ошибки и как их избежать
Даже при использовании проверенных инструментов конвертация может пойти не по плану. Вот самые распространённые проблемы и их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| В 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 на наличие тегов
Автоматизация: скрипты для пакетной конвертации
Если вам нужно регулярно конвертировать десятки 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 точками. Решения:
- Разбейте трек на сегменты по 1500 точек:
- Упростите трек, оставив ключевые точки:
gpsbabel -i gpx -f input.gpx -x track,split=1500 -o gpx -F output_split.gpx
gpsbabel -i gpx -f input.gpx -x simplify,count=1000 -o gpx -F output_simple.gpx
Как конвертировать KML в GPX на Android без компьютера?
Используйте приложение GPS Logger или OsmAnd:
- Скачайте KML-файл на телефон (например, через Google Диск).
- Откройте его в OsmAnd (поддерживает импорт KML).
- Экспортируйте в 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) с сохранением текстур.