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

Проблема в том, что прямая конвертация часто приводит к потере данных: исчезают высотные метки, временные штампы или атрибуты точек. Например, при переносе маршрута из Google My Maps в навигатор Garmin Edge может пропасть информация о скорости или сердечном ритме, если она была привязана к треку. В этой статье разберём как избежать типичных ошибок при конвертации KML в GPX, включая сохранение всех атрибутов и работу с большими файлами (более 10 000 точек).

Чем отличаются KML и GPX: когда нужна конвертация

Формат KML разработан компанией Keyhole Inc. (позже приобретённой Google) и поддерживает сложные геометрические объекты: многоугольники, 3D-модели, стили отображения и даже HTML-подсказки. Это делает его идеальным для создания интерактивных карт, но избыточным для GPS-навигаторов. GPX, в свою очередь, — это стандарт XML, предназначенный для обмена данными между устройствами: он содержит только координаты, высоту, время и базовые метаданные.

Конвертация требуется в следующих случаях:

  • 🗺️ Перенос маршрутов из Google Maps или Google Earth в навигаторы Garmin, Magellan или приложения вроде OsmAnd.
  • 🏔️ Экспорт треков с сервисов планирования походов (например, AllTrails или Komoot) для использования в офлайн-навигации.
  • 🚴 Подготовка данных для спортивных трекеров (Strava, Suunto), которые не поддерживают KML.
  • 📊 Анализ геоданных в программах вроде QGIS, где GPX обрабатывается быстрее из-за меньшего объёма.

Ключевое отличие — обработка <Placemark> (в KML) и <wpt>/<trkpt> (в GPX). Например, в KML одна метка может содержать описание на HTML, изображение и стиль отображения, тогда как в GPX та же метка будет представлена только координатами и кратким названием. Это означает, что при конвертации часть данных неизбежно теряется, если не использовать специализированные инструменты.

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

Топ-5 онлайн-конвертеров KML в GPX: плюсы и минусы

Онлайн-сервисы удобны для разовых задач, но имеют ограничения по размеру файла (обычно до 10 МБ) и не всегда сохраняют все метаданные. Ниже — сравнение популярных инструментов с учётом поддержки атрибутов и скорости работы.

Сервис Макс. размер файла Сохранение высоты Сохранение времени Поддержка сложных объектов
GPS Visualizer 50 МБ ❌ (упрощает геометрию)
GPSies 10 МБ
MyGeodata 200 МБ (платно) ⚠️ (частично)
OgreTools 5 МБ
KML2GPX 2 МБ

Для большинства задач оптимален GPS Visualizer: он бесплатен, поддерживает пакетную обработку и позволяет настраивать выходной формат (например, разбивать длинные треки на сегменты). Однако если ваш файл содержит временные метки, проверьте результат в GPX-валидаторе (например, на сайте TopoGrafix), так как некоторые сервисы округляют время до секунд.

📊 Какой сервис вы используете для конвертации?
  • GPS Visualizer
  • MyGeodata
  • OgreTools
  • Другой
  • Не конвертирую

Офлайн-конвертация: программы для Windows, macOS и Linux

Если вы работаете с конфиденциальными данными или нуждаетесь в регулярной конвертации, офлайн-программы предотвращают утечки и предлагают больше настроек. Рассмотрим лучшие решения для разных платформ.

Для Windows:

  • 🖥️ GPSBabel — кроссплатформенный инструмент с поддержкой более 100 форматов. Командная строка позволяет автоматизировать процесс:
    gpsbabel -i kml -f input.kml -o gpx -F output.gpx

    Чтобы сохранить высоту и время, добавьте флаг --track.

  • 🗂️ QGIS — профессиональная GIS-платформа, которая позволяет редактировать данные перед конвертацией. Подходит для сложных KML с полигонами.

Для macOS:

  • 🍎 GPS Babel GUI — оболочка для GPSBabel с графическим интерфейсом. Позволяет выбирать, какие данные сохранять (например, только треки или только метки).
  • 📊 Merkaartor — редактор OpenStreetMap, который умеет экспортировать KML в GPX с сохранением всех атрибутов.

Для Linux:

  • 🐧 GPSBabel (из репозиториев) + скрипт для пакетной обработки:
    for file in *.kml; do
    

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

    done

  • 🌍 GRASS GIS — для продвинутых пользователей, нуждающихся в анализе данных перед конвертацией.
⚠️ Внимание: При использовании GPSBabel для файлов с кириллическими названиями меток добавьте флаг -c utf8, иначе символы превратятся в кракозябры. Пример:
gpsbabel -i kml -f "маршрут.kml" -o gpx -F "маршрут.gpx" -c utf8

Установите GPSBabel с официального сайта|Проверьте кодировку исходного файла (UTF-8)|Создайте резервную копию KML|Настройте параметры вывода (--track или --route)-->

Конвертация с сохранением всех данных: временные метки, высота, атрибуты

Стандартные конвертеры часто игнорируют дополнительные поля в KML, такие как <ExtendedData> (где могут храниться скорость, температура или пользовательские метки). Чтобы перенести их в GPX, потребуется:

  1. Использовать XSLT-преобразование: создать шаблон, который маппирует поля KML в теги GPX. Пример для переноса высоты:
    <xsl:template match="kml:coordinates">
    

    <gpx:ele><xsl:value-of select="substring-before(substring-after(.,','),',')"/></gpx:ele>

    </xsl:template>

    Для автоматизации подойдёт Oxygen XML Editor или бесплатный XML Copy Editor.

  2. Применить Python-скрипт с библиотекой lxml:
    from lxml import etree
    
    

    kml = etree.parse('input.kml')

    gpx = etree.Element('gpx', version='1.1')

    # Далее парсинг координат и атрибутов

    etree.ElementTree(gpx).write('output.gpx', pretty_print=True)

    Полный скрипт можно найти на GitHub (поиск по запросу "kml to gpx extended data").

Если в KML есть временные метки в формате <TimeStamp> или <TimeSpan>, их нужно преобразовать в <time> в GPX. Например:

<trkpt lat="55.75" lon="37.61">

<ele>150</ele>

<time>2026-05-20T14:30:00Z</time>

</trkpt>

💡

Для проверки корректности временных меток используйте валидатор Epoch Converter. Он покажет, правильно ли распознано время в UTC.

Ошибки конвертации и как их исправить

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

1. Пропущенные координаты или "дыры" в треке

  • 🔍 Причина: В KML координаты могут быть записаны в формате лон,лат,высота, а конвертер ожидает лат,лон.
  • 🛠️ Решение: Откройте KML в текстовом редакторе и проверьте формат. При необходимости поменяйте местами широту и долготу с помощью sed:
    sed 's/\([^,]*,\([^,]*\),\([^ ]*\)/\2,\1,\3/g' input.kml > fixed.kml

2. Неправильная кодировка (кракозябры вместо кириллицы)

  • 🔍 Причина: KML сохранён в Windows-1251, а GPX ожидает UTF-8.
  • 🛠️ Решение: Конвертируйте файл с помощью iconv:
    iconv -f WINDOWS-1251 -t UTF-8 input.kml > output.kml

3. Потеря высоты (элемент <ele> пустой)

  • 🔍 Причина: В KML высота указана как 0 или отсутствует.
  • 🛠️ Решение: Воспользуйтесь сервисом GPS Visualizer с опцией "Add elevations" (он подтянет высоты из Google Maps API).

4. GPX не открывается в навигаторе

  • 🔍 Причина: Несоответствие версии GPX (например, навигатор поддерживает только GPX 1.0, а вы экспортировали в 1.1).
  • 🛠️ Решение: Укажите версию явно в GPSBabel:
    gpsbabel -i kml -f input.kml -o gpx,gpxver=1.0 -F output.gpx
Что делать, если GPX-файл слишком большой?

Если файл превышает лимит навигатора (например, 20 000 точек для Garmin), разбейте его с помощью GPX Editor или команды:

gpsbabel -i gpx -f large.gpx -o gpx -F "part_%n.gpx" --split=20000

Это создаст несколько файлов по 20 000 точек каждый.

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

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

1. Bash-скрипт для пакетной обработки

Создайте файл convert.sh:

#!/bin/bash

for file in *.kml; do

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

done

Сделайте его исполняемым (chmod +x convert.sh) и запускайте в папке с KML-файлами.

2. Python + библиотека pykml

Установите зависимости:

pip install pykml gpxpy

Затем используйте скрипт:

from pykml import parser

import gpxpy.gpx

with open('input.kml') as f:

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

gpx = gpxpy.gpx.GPX()

# Далее парсинг координат и создание GPX-объектов

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

f.write(gpx.to_xml())

3. Облачные функции (AWS Lambda, Google Cloud Functions)

Если файлы хранятся в облаке, можно настроить триггер на загрузку KML в Google Drive или S3, который автоматически генерирует GPX. Пример для AWS Lambda:

const AWS = require('aws-sdk');

const { parseString } = require('xml2js');

const { buildGPX } = require('gpx-builder');

exports.handler = async (event) => {

const s3 = new AWS.S3();

const kmlData = await s3.getObject({ Bucket: event.bucket, Key: event.key }).promise();

// Парсинг KML и генерация GPX

await s3.putObject({ Bucket: 'output-bucket', Key: 'output.gpx', Body: gpx }).promise();

};

💡

Для автоматизации выбирайте инструменты с поддержкой API: GPS Visualizer и MyGeodata позволяют интегрировать конвертацию в свои приложения через HTTP-запросы.

Конвертация KML в GPX на мобильных устройствах

Если вам нужно срочно преобразовать файл в полевых условиях (например, скачанный маршрут из Google My Maps), используйте мобильные приложения. Они менее функциональны, чем десктопные решения, но справляются с базовыми задачами.

Для Android:

  • 📱 GPX Viewer — импортирует KML из облака или локального хранилища, экспортирует в GPX с сохранением высоты.
  • 🗺️ OsmAnd — поддерживает прямую загрузку KML, но для экспорта в GPX потребуется плагин "Export".

Для iOS:

  • 🍏 Gaia GPS — конвертирует KML в GPX прямо в приложении, но требует подписки для работы с большими файлами.
  • 📲 GPS Kit — позволяет редактировать метки перед экспортом.

Ограничения мобильных приложений:

  • ❌ Нет поддержки <ExtendedData>.
  • ❌ Максимальный размер файла — обычно 5–10 МБ.
  • ❌ Нет точной настройки выходного формата (например, выбора версии GPX).
⚠️ Внимание: При использовании OsmAnd для конвертации проверьте настройки экспорта: по умолчанию приложение может округлять координаты до 5 знаков после запятой, что снижает точность до ~1 метра. Включите опцию "High precision" в меню экспорта.

FAQ: Частые вопросы о конвертации KML в GPX

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

Полностью избежать потерь невозможно, так как форматы имеют разную структуру. Однако с помощью XSLT или Python-скриптов можно перенести до 90% данных, включая пользовательские атрибуты. Главное — проверить результат в валидаторе GPX.

Почему после конвертации трек в GPX стал "рваным"?

Это происходит из-за разного порядка точек в KML и GPX или пропущенных координат. Используйте QGIS для визуальной проверки исходного KML: если трек уже "рваный" там, проблема в исходных данных. Если нет — повторите конвертацию с флагом --track в GPSBabel.

Как конвертировать KML с полигонами в GPX?

GPX не поддерживает полигоны напрямую, но их можно преобразовать в набор точек (waypoints) или маршрут (route). В QGIS экспортируйте полигон как LineString, а затем конвертируйте в GPX. Альтернатива — использовать MyGeodata с опцией "Convert polygons to lines".

Мой навигатор не видит GPX-файл. В чём дело?

Проблема может быть в:

  • Неправильной версии GPX (попробуйте 1.0 вместо 1.1).
  • Несоответствии кодировки (преобразуйте в UTF-8).
  • Слишком большом размере файла (разбейте его на части).
  • Неправильном пути сохранения (например, Garmin требует размещать GPX в папке /Garmin/GPX/).
Можно ли конвертировать GPX обратно в KML?

Да, но с теми же ограничениями: потеря стилей, упрощение геометрии. Для обратной конвертации используйте те же инструменты (GPSBabel, GPS Visualizer), но учитывайте, что KML не поддерживает некоторые GPX-теги, например <hr> (сердечный ритм) или <cad> (каденс).