Формат 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 ошибок и способы их решения:
- Потеря временных меток
Причина: В исходном KML время хранится в теге
<TimeStamp>или<when>, но не все конвертеры его распознают.
Решение: Используйте GPS Babel с флагом-x track,packили QGIS с плагиномTimeManager. - Разбитые треки (линии превращаются в точки)
Причина: KML может содержать
<MultiGeometry>, которую конвертеры интерпретируют как набор отдельных точек.
Решение: Предварительно объедините геометрии в QGIS черезVector → Geometry Tools → Multipart to Singleparts. - Искажённые координаты
Причина: Несовпадение систем координат (например, KML в EPSG:3857, а GPX ожидает WGS84).
Решение: В QGIS перепроецируйте слой перед экспортом:Правка → Настройки проекта → СК → Выбрать EPSG:4326. - Потеря высоты (altitude)
Причина: Некоторые конвертеры игнорируют тег
<altitude>в KML.
Решение: Используйте OGRE (онлайн) или Global Mapper с включённой опциейExport Elevations. - Дублирование точек
Причина: В KML одна и та же координата может быть указана в
<Placemark>и<Track>.
Решение: Очистите файл через Notepad++ (регулярное выражение:<Placemark>.*?</Placemark>для удаления дублей).
Перед конвертацией откройте KML в текстовом редакторе и проверьте наличие тегов <gx:Track>. Если они есть, используйте GPS Babel с опцией -x transform,wpt=trk, чтобы сохранить структуру трека.
Автоматизация конвертации: скрипты и API
Если вам нужно конвертировать сотни файлов еженедельно (например, для обработки данных с дронов или геодезических приборов), ручные методы не подойдут. В этом случае поможет автоматизация через:
- 🐍 Python + библиотека pykml и gpxpy
Пример скрипта для пакетной обработки:
import osfrom 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 точек на экран, поэтому:
- В QGIS примените инструмент
Vector → Geometry Tools → Simplifyс допуском 0.0001. - Или используйте GPS Babel с флагом
-x simplify,crosstrack,error=0.001k.
Как конвертировать KML с несколькими слоями в один GPX?
Если в KML есть несколько слоёв (например, «Маршрут», «Отели», «Достопримечательности»), и вы хотите объединить их в один GPX:
- Откройте KML в QGIS.
- Выделите все слои, кликните правой кнопкой →
Экспорт → Сохранить объекты как.... - Выберите формат
GPXи включите опциюДобавить сохранённый файл к карте.
В результате получится один GPX-файл со всеми данными, но без сохранения исходной иерархии.
Какой конвертер лучше для работы с данными дронов (например, DJI)?
Файлы с дронов (например, DJI Flight Logs) содержат высоту, скорость и ориентацию. Для их конвертации:
- Используйте Airsdata UAV Tools (онлайн) — он сохраняет
extendedDataс параметрами полёта. - Или QGIS с плагином
Drone Mappingдля визуализации 3D-треков.
Обычные конвертеры (вроде GPSVisualizer) проигнорируют данные телеметрии.
Можно ли автоматизировать конвертацию для еженедельных отчётов?
Да, для этого подойдёт:
- Python-скрипт (см. раздел про автоматизацию) + cron (Linux/macOS) или Task Scheduler (Windows).
- Zapier/Integromat (для облачной автоматизации). Например, триггер «Новый файл в Google Drive» → действие «Конвертировать через MyGeodata API» → «Сохранить в Dropbox».
- Docker-контейнер с GPS Babel, развёрнутый на сервере.
Пример для Zapier:
Trigger: "New File in Folder" (Google Drive)
Action: "Webhooks by Zapier" → POST to MyGeodata API
Action: "Save File" (Dropbox)