Исторические границы: источники и лицензия
Карта «Машина времени» построена на чужих открытых данных. Здесь сказано, на чьих именно, что мы в них изменили, на каких условиях отдаём результат и как его скачать и пересобрать. Это не формальность: 53 из 67 срезов распространяются под GNU GPL v3, и лицензия обязывает нас всё перечисленное назвать.
Что это за данные
67 датированных срезов политических границ мира — от 123 000 до н. э. до 2010 года. Один срез — один файл JSON: список территорий с названием, метрополией, признаком точности границы и геометрией. Общий вес срезов — 39,5 МБ (со словарём названий и каталогом набор весит чуть больше — точные размеры в описи). Карта на сайте грузит ровно один срез — тот, который вы выбрали на таймлайне.
Границы историчны и приблизительны. Пунктир на карте означает, что точность границы в источнике помечена как оценка. Для академической работы данные надо сверять с другими источниками — об этом просит и сам автор исходного набора.
Откуда взяты
| Источник | Срезов | Лицензия источника |
|---|---|---|
| historical-basemaps — A. Ourednik и участники | 53 | GNU GPL v3 |
| OpenHistoricalMap — участники проекта | 14 | CC0 1.0 (общественное достояние) |
Срезы historical-basemaps взяты из коммита 62d8f1a0 от 26 января 2026 года — версия зафиксирована, чтобы набор можно было собрать заново и получить то же самое. Данные OpenHistoricalMap выгружены через Overpass API 10 июля 2026 года.
Что мы изменили
Изменения внесены 10 июля 2026 года проектом РеалСтат (real-stats.ru):
- Упростили геометрию — порог 0,005° (алгоритм упрощения с сохранением топологии). Без этого срез весит десятки мегабайт и карта не открывается на телефоне.
- Округлили координаты до 0,001° — около 110 метров по меридиану.
- Переупаковали структуру файлов: вместо GeoJSON с
propertiesиgeometry— компактная схемаn(название),s(метрополия),p(в составе),b(точность границы),g(геометрия). - Вынесли русские названия в отдельный файл
ru.json. Это наша работа, на геометрию она не влияет.
Чего мы не делали: не правили саму геометрию границ, не меняли названия и точность в исходных данных, не перепроецировали — на входе и на выходе WGS84 (EPSG:4326). В картографическую проекцию карту переводит браузер при отрисовке.
На каких условиях мы отдаём результат
Наши производные срезы, построенные на historical-basemaps (53 файла), распространяются на тех же условиях, что и источник, — GNU General Public License версии 3 (обозначение SPDX: GPL-3.0-only). Полный текст лицензии лежит здесь же, на нашем домене: /licenses/gpl-3.0.txt — это редакция с gnu.org.
Именно версии 3, без обычной оговорки «или любой более поздней»: в источнике такой оговорки нет, значит и права выбирать более позднюю версию нам не передавали. Брать себе больше прав, чем дали, мы не будем — даже когда это выглядит безобидно.
Срезы, построенные на OpenHistoricalMap (14 файлов), остаются в общественном достоянии — CC0 1.0. Файл ru.json со словарём русских названий мы также отдаём под GNU GPL v3: его ключи — названия держав из обоих наборов, и осторожность здесь дешевле спора. Скрипты сборки — наша собственная работа, они под GPL-3.0-or-later.
Уведомление о лицензии, источнике, дате и характере изменений записано внутрь каждого файла — в поля license, source, modified, warranty. Тот, кто пришёл прямой ссылкой на файл и этой страницы не видел, всё равно получит их вместе с копией.
Мы не добавляем к этим данным никаких собственных ограничений: ни запрета на скачивание, ни требования согласовывать использование, ни платы. Это не щедрость, а условие лицензии.
Скачать
- Опись набора — MANIFEST.txt: лицензия, размер и прямая ссылка на каждый файл, плюс команда, которая одной строкой скачивает всё — данные, текст лицензии, скрипты сборки и копию исходников. Текст лицензии обязан ехать вместе с данными, а не оставаться на сайте.
- Каталог срезов — index.json: список годов и имён файлов, тот же, что читает карта.
- Отдельные файлы — в таблице ниже, каждый по прямой ссылке.
Как собрать набор заново
Скрипты сборки открыты и лежат рядом с текстом лицензии:
- hb_pack.py — срезы из historical-basemaps: скачивание исходников из зафиксированного коммита, упрощение, переупаковка, сверка.
- ohm_pack.py — срезы из OpenHistoricalMap: выгрузка через Overpass, сборка мультиполигонов, упрощение.
Для точного повторения нужен shapely — упрощением занимается GEOS, и другая реализация даст другой результат. Сверка проходила на shapely 2.1.2 / GEOS 3.13.1 / Python 3.13.7; без shapely скрипт работает, но предупреждает, что выход будет другим.
curl -sSLO https://www.real-stats.ru/licenses/hb_pack.pypython3 hb_pack.py fetch— исходники (71 МБ): из репозитория-источника, а если он недоступен — из нашей копииpython3 hb_pack.py build— те же срезыpython3 hb_pack.py verify— сверка с опубликованными
Сверка от 6 сентября 2026 года: все 53 среза historical-basemaps собираются этим скриптом побайтово так же, как лежат на сайте. Оговорка честности: конвейер, которым набор собирали в июле 2026 года, в репозиторий не попал, и hb_pack.py восстановлен по фактическим данным. Восстановление подтверждено именно побайтовой сверкой, а не на глаз.
Полноточные исходники лежат копией у нас — historical-basemaps-62d8f1a0-geojson.tar.gz (26,0 МБ, контрольная сумма): то самое дерево geojson/ из зафиксированного коммита. Команда fetch сначала идёт в репозиторий-источник, а если его не окажется — берёт нашу копию. Так сделано намеренно: держать исходники доступными лицензия обязывает нас, и перекладывать эту обязанность на чужой сервер было бы нечестно.
Без гарантий
Данные предоставляются «как есть», без каких-либо гарантий, в том числе без гарантий пригодности для конкретной цели и отсутствия ошибок (GNU GPL v3, §15–16). Исторические границы — реконструкция, а не документ: они приблизительны, а по ряду эпох и регионов спорны между историками.
Все 67 срезов
| Год | Файл | Территорий | Размер | Лицензия |
|---|---|---|---|---|
| 123 000 до н. э. | bc123000.json | 157 | 277 КБ | GPL-3.0-only |
| 10 000 до н. э. | bc10000.json | 135 | 303 КБ | GPL-3.0-only |
| 8 000 до н. э. | bc8000.json | 134 | 302 КБ | GPL-3.0-only |
| 5 000 до н. э. | bc5000.json | 279 | 1111 КБ | GPL-3.0-only |
| 4 000 до н. э. | bc4000.json | 136 | 304 КБ | GPL-3.0-only |
| 3 000 до н. э. | bc3000.json | 138 | 305 КБ | GPL-3.0-only |
| 2 000 до н. э. | bc2000.json | 145 | 327 КБ | GPL-3.0-only |
| 1 500 до н. э. | bc1500.json | 162 | 335 КБ | GPL-3.0-only |
| 1 000 до н. э. | bc1000.json | 162 | 335 КБ | GPL-3.0-only |
| 700 до н. э. | bc700.json | 173 | 337 КБ | GPL-3.0-only |
| 500 до н. э. | bc500.json | 189 | 350 КБ | GPL-3.0-only |
| 400 до н. э. | bc400.json | 189 | 344 КБ | GPL-3.0-only |
| 323 до н. э. | bc323.json | 147 | 340 КБ | GPL-3.0-only |
| 300 до н. э. | bc300.json | 153 | 348 КБ | GPL-3.0-only |
| 200 до н. э. | bc200.json | 179 | 358 КБ | GPL-3.0-only |
| 100 до н. э. | bc100.json | 219 | 365 КБ | GPL-3.0-only |
| 1 до н. э. | bc1.json | 385 | 437 КБ | GPL-3.0-only |
| 100 | 100.json | 382 | 436 КБ | GPL-3.0-only |
| 200 | 200.json | 328 | 433 КБ | GPL-3.0-only |
| 300 | 300.json | 401 | 435 КБ | GPL-3.0-only |
| 400 | 400.json | 341 | 420 КБ | GPL-3.0-only |
| 500 | 500.json | 202 | 369 КБ | GPL-3.0-only |
| 600 | 600.json | 198 | 393 КБ | GPL-3.0-only |
| 700 | 700.json | 252 | 369 КБ | GPL-3.0-only |
| 800 | 800.json | 223 | 371 КБ | GPL-3.0-only |
| 900 | 900.json | 241 | 403 КБ | GPL-3.0-only |
| 1000 | 1000.json | 257 | 422 КБ | GPL-3.0-only |
| 1100 | 1100.json | 234 | 402 КБ | GPL-3.0-only |
| 1200 | 1200.json | 278 | 397 КБ | GPL-3.0-only |
| 1279 | 1279.json | 242 | 391 КБ | GPL-3.0-only |
| 1300 | 1300.json | 232 | 388 КБ | GPL-3.0-only |
| 1400 | 1400.json | 227 | 400 КБ | GPL-3.0-only |
| 1492 | 1492.json | 1903 | 1512 КБ | GPL-3.0-only |
| 1500 | 1500.json | 283 | 434 КБ | GPL-3.0-only |
| 1530 | 1530.json | 489 | 520 КБ | GPL-3.0-only |
| 1600 | 1600.json | 860 | 683 КБ | GPL-3.0-only |
| 1650 | 1650.json | 776 | 683 КБ | GPL-3.0-only |
| 1700 | 1700.json | 781 | 671 КБ | GPL-3.0-only |
| 1715 | 1715.json | 757 | 700 КБ | GPL-3.0-only |
| 1740 | 1740.json | 186 | 1023 КБ | CC0-1.0 |
| 1783 | 1783.json | 641 | 692 КБ | GPL-3.0-only |
| 1800 | 1800.json | 627 | 680 КБ | GPL-3.0-only |
| 1815 | 1815.json | 436 | 617 КБ | GPL-3.0-only |
| 1820 | 1820.json | 207 | 881 КБ | CC0-1.0 |
| 1830 | 1830.json | 209 | 1173 КБ | CC0-1.0 |
| 1848 | 1848.json | 221 | 1158 КБ | CC0-1.0 |
| 1861 | 1861.json | 209 | 868 КБ | CC0-1.0 |
| 1866 | 1866.json | 207 | 864 КБ | CC0-1.0 |
| 1871 | 1871.json | 168 | 1081 КБ | CC0-1.0 |
| 1878 | 1878.json | 170 | 1093 КБ | CC0-1.0 |
| 1880 | 1880.json | 236 | 502 КБ | GPL-3.0-only |
| 1890 | 1890.json | 187 | 888 КБ | CC0-1.0 |
| 1900 | 1900.json | 270 | 493 КБ | GPL-3.0-only |
| 1908 | 1908.json | 185 | 969 КБ | CC0-1.0 |
| 1914 | 1914.json | 177 | 496 КБ | GPL-3.0-only |
| 1920 | 1920.json | 205 | 546 КБ | GPL-3.0-only |
| 1925 | 1925.json | 203 | 998 КБ | CC0-1.0 |
| 1930 | 1930.json | 191 | 502 КБ | GPL-3.0-only |
| 1938 | 1938.json | 253 | 541 КБ | GPL-3.0-only |
| 1945 | 1945.json | 227 | 519 КБ | GPL-3.0-only |
| 1949 | 1949.json | 193 | 995 КБ | CC0-1.0 |
| 1960 | 1960.json | 197 | 504 КБ | GPL-3.0-only |
| 1975 | 1975.json | 187 | 1010 КБ | CC0-1.0 |
| 1989 | 1989.json | 193 | 900 КБ | CC0-1.0 |
| 1994 | 1994.json | 240 | 590 КБ | GPL-3.0-only |
| 2000 | 2000.json | 240 | 590 КБ | GPL-3.0-only |
| 2010 | 2010.json | 240 | 589 КБ | GPL-3.0-only |
Страница собирается из самих файлов: и таблица, и лицензии в ней читаются из срезов при сборке сайта — разойтись с тем, что лежит на сервере, она не может.