Привет, Хабр! Я историк, работаю над историко-географическими базами данных в российском генеалогическом сервисе familio.org. В этой статье расскажу, как мы сделали карту исторических промыслов Костромской губернии для фестиваля семейной истории в Кинешме. Надеюсь, что материал будет интересен не только любителям исторической географии, но и тем, кто интересуется визуализацией своих данных на карте.

Карту можно посмотреть (и при желании скачать в формате kml) на Google картах.
Карту можно посмотреть (и при желании скачать в формате kml) на Google картах.

Наша команда собирает, обрабатывает и публикует в электронном виде исторические данные, которые полезны для генеалогического поиска. Особое место среди них занимают списки населённых мест (прим. «населённое место» — это то же самое, что и «населённый пункт», но до 1920-х годов преимущественно использовался первый термин). Эти списки в большинстве случаев издавались в губерниях, из-за чего у них значительно варьируется формат и содержимое.

К примеру, есть замечательный список населённых мест по Витебской губернии 1906 года, в котором для каждого населённого пункта указано к какому церковному приходу тот относился — а это ключевая информация для генеалогического поиска, т.к. в церквях велись все записи о рождениях, браках и смертях.

Во многих случаях списки населённых мест составлялись по результатам земских социально-экономических исследований (прим. земство — дореволюционный орган местного самоуправления). К одному из таких изданий относится и список населённых мест Костромской губернии 1907 года, в нём содержатся сведения о местных промыслах. Оригинал справочника, вернее, его скан, с которого начинается вся работа, выглядит следующим образом.

Этот текст из справочника мы распознаём в формате таблицы, приводим к единому формату нашей базы данных, а потом связываем с существующей базой населённых пунктов, в основу которой положены современные реестры ОКТМО и АГКГН (они покрывают примерно до двух третей от общего количества исторически существовавших на территории России населённых пунктов в течение последних двух-трёх веков). Связывание записей с н/п — процедура довольно трудоёмкая, т.к. многие населённые пункты, упоминаемые в дореволюционных документах, ныне уже не существуют, но используя данные о расстояниях (прим. одна из наиболее часто встречающихся характеристик в подобных изданиях — расстояние от деревни до города, волостного правления и т.д.) большую часть подобных лакун удаётся реконструировать и нанести отсутствующие метки на карту. Этим у нас занимаются специально подготовленные люди, которые умеют работать со старыми картами, например, с ресурсом etomesto.ru. Сильно помогают и деревни с уникальными названиями, например, Выхино в Российской империи было только одно.

В результате этого кропотливого труда у нас получается набор таблиц с деревнями, их характеристиками и связями с вышестоящими уровнями (волостями и уездами), а также с населёнными пунктами из базы.
В результате этого кропотливого труда у нас получается набор таблиц с деревнями, их характеристиками и связями с вышестоящими уровнями (волостями и уездами), а также с населёнными пунктами из базы.

Теперь у нас есть данные, с которыми можно работать в табличных, текстовых и ГИС-редакторах. Для начала просто устроим перекрёстную проверку и посмотрим насколько хорошо были привязаны деревни к базе населённых пунктов. Для этого открываем QGIS, добавляем osm-подложку, и загружаем через CTRL+SHIFT+T единую таблицу с координатами и вышестоящими уровнями. Потом кликаем правой мышкой на слой и отрываем Properties этого слоя, где указываем Symbology как Categorized, где последовательно выбираем разные атрибуты (уезд, волость, дистанцию и прочее).

Так выглядит карта, если метки деревень автоматически раскрасить в цвета уездов. Если какая-то метка «улетает» далеко от своих цветовых собратьев, то, скорее всего, эта связь установлена ошибочно и нуждается в ревизии в базе данных.
Так выглядит карта, если метки деревень автоматически раскрасить в цвета уездов. Если какая-то метка «улетает» далеко от своих цветовых собратьев, то, скорее всего, эта связь установлена ошибочно и нуждается в ревизии в базе данных.

Теперь нужно стандартизировать промыслы. Костромская губерния наряду с соседней Ярославской была одной из самых развитых губерний в плане промыслов, огромное количество местных крестьян уходило на заработки в столицу и другие города. Сводная таблица показывает, что уникальных значений в колонке с промыслами под 2000 объектов, причем во многих случаях сокращения неодинаковые и зачастую в ячейке перечислено несколько промыслов таким образом. Нам, конечно, нужен только самый популярный, но терять информацию жалко, поэтому надо развернуть все промыслы построчно. Делается это следующим образом: заменяем запятую с пробелом на разделитель "|", притягиваем через такой же разделитель уникальный идентификатор записи (у нас в этом качестве используется uuid-4), а после в текстовом редакторе при помощи регулярных выражений заменяем все разделители на перенос строки. Далее в экселе в каждой строке формулой дублируем идентификаторы до следующего встречного идентификатора.

Видно, что в третьей строке разделителем служил просто пробел, но поменять все пробелы на разделители нельзя, поскольку название многих промыслов содержит пробел.
Видно, что в третьей строке разделителем служил просто пробел, но поменять все пробелы на разделители нельзя, поскольку название многих промыслов содержит пробел.

Теперь предстоит унифицировать эти значения, и когда они все развёрнуты построчно, то сделать это уже гораздо проще. Сортируем по алфавиту получившиеся уникальные значения и приводим к единому значению («пл.», «плот.», «плотн.» → «плотники»). Перед сортировкой не забываем сохранить оригинальный порядок в отдельную табличку, так как нам интересен именно самый распространенный промысел, т. е. первый в списке для каждой деревни. В результате всех этих операций получается набор в виде 11 607 населённых пунктов с координатами, на которые приходится 111 доминирующих там промыслов: от ассенизаторов до штукатуров.

Деревни Костромской губернии, раскрашенные в цвет самого распространенного в тех местах промысла
Деревни Костромской губернии, раскрашенные в цвет самого распространенного в тех местах промысла

Карта уже становится достаточно интересной: видны большие кластеры фабричных рабочих на юго-западе (современная Ивановская область), маляров в окрестностях Галича, а также портных около Неи. Но для удобства восприятия хорошо бы как-то закрасить и объединить промежуточные области. Для этого отлично подходит диаграмма Вороного, её можно найти в QGIS в разделе Vector → Geometry Tools → Voronoi Polygons. Получившейся диаграмме присваиваем атрибуты деревень через Vector → Data Management Tools → Join Attributes by Location.

Обрезаем получившийся результат через Vector → Geoprocessing Tools → Intersection по примерной границе Костромской губернии.

А после объединяем отдельные полигоны через Vector → Geoprocessing Tools → Dissolve, указав в качестве критерия поле с промыслом. При использовании диаграммы Вороного часто получаются довольно «рваные» границы с резкими углами, поэтому мы генерируем гексагональную сетку через Vector → Research Tools → Create Grid с шагом в километр, а потом присваиваем ей атрибуты с диаграммы Вороного через Vector → Data Management Tools → Join Attributes by Location.

Получившуюся карту уже вполне можно показывать, но этот момент до фестиваля остаётся всего-ничего времени, а хочется как-нибудь быстро сделать доступную онлайн карту, чтобы слушатели могли прямо во время презентации её посмотреть и приблизить интересующие их места. Вариантов тут не очень много, основных два: Google карты и Яндекс карты. Яндекс, к сожалению, отпадает сразу, т.к. такие большие объекты импортировать нельзя.

Остаются Google карты, в которых также выяснятся, что импортировать kml файл размером больше 5 МБ нельзя.

А у нас как раз получилась карта немногим больше 5 МБ, обидно! Начинаем смотреть начинку kml файла в поисках того, что можно пустить под нож и обнаруживаем излишне длинные координаты в 12–13 символов после запятой (в нашем случае 5 символов после запятой хватит с запасом). Возвращаемся в QGIS и экспортируем kml ещё раз с ограничением символов после запятой. Получается 3 МБ, файл успешно импортируется, и после небольшой раскраски карта наконец готова!

Карту можно посмотреть (и при желании скачать в формате kml) по ссылке.
Карту можно посмотреть (и при желании скачать в формате kml) по ссылке.

Теперь проделанной работой можно любоваться. Некоторые избранные места на карте:

Большое «море» плотников в Галичском уезде и окрестностях. Уходили в основном на заработок в Санкт-Петербург, где заработали себе хорошую репутацию.
Большое «море» плотников в Галичском уезде и окрестностях. Уходили в основном на заработок в Санкт-Петербург, где заработали себе хорошую репутацию.
Профессиональные нищие в деревеньке Ивановской области. И такое бывало.
Профессиональные нищие в деревеньке Ивановской области. И такое бывало.
Серпозубы (пришлось гуглить, кто такие) в окрестностях Сусанино — путешествуют и предлагают заточить сельхозинвентарь
Серпозубы (пришлось гуглить, кто такие) в окрестностях Сусанино — путешествуют и предлагают заточить сельхозинвентарь
Ассенизаторы в окрестностях Костромы (интересно, сохранила ли местная история рассказы о славном промысловом прошлом).
Ассенизаторы в окрестностях Костромы (интересно, сохранила ли местная история рассказы о славном промысловом прошлом).
Кошатный промысел в селе Холм (заготавливают кошачий мех для городских модниц).
Кошатный промысел в селе Холм (заготавливают кошачий мех для городских модниц).
Профессиональные изготовители кренделей из деревни Рылово.
Профессиональные изготовители кренделей из деревни Рылово.

Думаю, что читатель, дошедший до этого места, и сам найдёт на карте интересные места.

Спасибо за чтение!

Комментарии (13)


  1. huliganov
    18.07.2024 16:42
    +3

    Очень кропотливая работа проделана. Интересно было почитать о процессе.
    Насколько интереснее были бы всякие сухие статистические данные, если бы их представляли в виде различных карт и инфограмм.


  1. AyDar9
    18.07.2024 16:42
    +3

    По моему это очень интересно узнать как исторические данные могут быть использованы для создания геоинформационных карт. Особенно впечатляет внимание к деталям и методология обработки данных, которые позволили визуализировать исторические промыслы Костромской губернии. Работа с QGIS и интеграция информации из разных источников показывает высокий уровень профессионализма и увлеченности. Это действительно вдохновляет на дальнейшее изучение генеалогии и исторической географии. Спасибо за подробное объяснение процесса и за возможность увидеть такой крутой результат!


  1. Real_Fermer
    18.07.2024 16:42
    +1

    похоже ребята словили хабр эффект. ;) Зашел на сайт. Сайт еле дышит. :) попробую через пару дней посмотреть свою генеалогию


    1. huliganov
      18.07.2024 16:42

      хм, у меня нормально всё бегает.


  1. PereslavlFoto
    18.07.2024 16:42

    сделали карту исторических промыслов Костромской губернии

    По каким типовым лицензиям вы разрешаете неограниченному кругу лиц использовать ваши карты любым способом и для любых целей?

    Спасибо.


    1. lasternic Автор
      18.07.2024 16:42

      Спасибо за вопрос!

      Мы пока в основном занимались сбором данных и карт на текущий момент выпустили, к сожалению, не так уж много. К примеру, есть ещё небольшая серия карт с зонами, где мы похожим образом рассчитали, где было крепостное право и где его не было. Все эти карты можно использовать по CC BY-NC-SA.


      1. PereslavlFoto
        18.07.2024 16:42

        Но ведь некоммерческая лицензия полностью запрещает любое использование ваших карт в промышленности. Получается, что их нельзя вообще никак использовать для работы с клиентами.

        И более того: некоммерческая лицензия лишена смысла, потому что повторяет те разрешения, которые указаны в 1274 статье Гражданского кодекса. Там уже позволено всё, что вы позволяете.

        Прошу вас, пожалуйста, выпускайте ваши карты по лицензиям, которые позволяют всем предприятиям использовать карты любым способом и для любых целей.


  1. Harvester31
    18.07.2024 16:42
    +2

    Спасибо за интересную статью! Попробуйте воспользоваться сервисом от NextGIS.ru, по крайней мере там таких проблем с объемом нет и есть обмен данными с QGIS. Многие исследовательские команды ими пользуются.


    1. lasternic Автор
      18.07.2024 16:42

      Спасибо, попробуем!


  1. Linashed
    18.07.2024 16:42

    Спасибо огромное за статью! Очень интересно было читать и смотреть на получившийся результат. Подскажите, можно ли ознакомиться с данными в excel формате, тоже очень хотелось бы покопаться.

    Сам по профессии айтишник, но также увлекаюсь историей, может знаете людей/проекты, которым можно помочь со стороны айти


    1. lasternic Автор
      18.07.2024 16:42

      Спасибо!

      К сожалению, эксель передать не смогу, так как данные принадлежат компании, но если вас что-то конкретное интересует, то можем сгенерировать другую карту.

      Касательно вашего второго вопроса, мне кажется, таких проектов довольно много, потому что в большинстве случаев историки и краеведы не работают с базами данных в чистом виде, но те сведения, с которыми они работают, вполне подлежат категоризации. Например, у нас есть замечательная местная группа Старая Вологда, где уже накопилась внушительная коллекция из 46 тысяч пользовательских фотографии. Само собой, по этому массиву уже сложно что-то искать вручную, так как они максимум категоризированы по периодам, улицам и фотографам. Один мой знакомый спарсил все комментарии и описания к фото и сделал небольшую поисковую систему чисто по этой группе, стало гораздо удобнее.


      1. PereslavlFoto
        18.07.2024 16:42

        из 46 тысяч пользовательских фотографии

        Причём фотографы никак не разрешили использовать этот материал, да? И каждый раз, чтобы использовать такие фотографии в книге или другом промышленном проекте, приходится ехать в Вологду, искать фотографа и подписывать договор?


        1. lasternic Автор
          18.07.2024 16:42

          Затрудняюсь ответить на ваш вопрос, так как я никак не связан с группой Старая Вологда и не испытывал необходимости использовать опубликованные там материалы по работе. То есть под «у нас» я имел в виду «у нас в Вологде», не более того.