Почему GeoJSON побеждает KML
Публикации

Почему GeoJSON побеждает KML

Что вообще такое эти форматы?

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.