Что вообще такое эти форматы?
KML (Keyhole Markup Language)
Родился в компании Keyhole (отсюда и название), которую Google купил в 2004 году. Это, по сути, XML-диалект — тот самый XML, где каждая точка обёрнута в теги как новогодний подарок:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>Точка №1</name>
<Point>
<coordinates>37.6173,55.7558,0</coordinates>
</Point>
</Placemark>
</kml>
Что здесь происходит? Мы написали 7 строк кода, чтобы показать одну точку. Это как писать письмо, чтобы сказать "привет".
GeoJSON
Появился в 2008 году как часть движения за открытые геоданные. Это JSON (JavaScript Object Notation) — формат, который понимает всё: от веб-карт до мобильных приложений и Python-скриптов.
{
"type": "Feature",
"properties": {"name": "Точка №1"},
"geometry": {
"type": "Point",
"coordinates": [37.6173, 55.7558]
}
}
Три строки. Та же информация. И читается как обычный текст, а не как инструкция по сборке шкафа IKEA. А теперь представьте, что вам нужно быстро проверить координаты в файле. Откройте KML — и вы видите лес из тегов <, >, /. Откройте GeoJSON — и видите структуру "ключ: значение", понятную даже секретарше.
И самое главное XML — многословен по определению. Каждая точка в KML обёрнута в <coordinates>, каждый полигон в <Polygon>. Возьмем в качестве реального примера файл с 10 000 точек:
- KML: ~850 КБ (с отступами и переносами строк)
- GeoJSON: ~420 КБ (в два раза меньше!)

А если сжать, то GeoJSON + gzip часто даёт экономию до 80-90%. Для мобильных приложений и веб-карт это критично — пользователь не будет ждать загрузки вашей "тяжёлой" геометрии на 3G-связи в поле.
Поэтому технологии должны работать на вас, а не вы на них. GeoJSON требует меньше телодвижений. И если заказчик требует KML — конвертируйте в последний момент, а исходники храните в GeoJSON.