Привет, Хабр! Я историк, работаю над историко-географическими базами данных в российском генеалогическом сервисе familio.org. В этой статье расскажу, как мы сделали карту исторических промыслов Костромской губернии для фестиваля семейной истории в Кинешме. Надеюсь, что материал будет интересен не только любителям исторической географии, но и тем, кто интересуется визуализацией своих данных на карте.
Наша команда собирает, обрабатывает и публикует в электронном виде исторические данные, которые полезны для генеалогического поиска. Особое место среди них занимают списки населённых мест (прим. «населённое место» — это то же самое, что и «населённый пункт», но до 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 МБ, файл успешно импортируется, и после небольшой раскраски карта наконец готова!
Теперь проделанной работой можно любоваться. Некоторые избранные места на карте:
Думаю, что читатель, дошедший до этого места, и сам найдёт на карте интересные места.
Спасибо за чтение!
Комментарии (13)
AyDar9
18.07.2024 16:42+3По моему это очень интересно узнать как исторические данные могут быть использованы для создания геоинформационных карт. Особенно впечатляет внимание к деталям и методология обработки данных, которые позволили визуализировать исторические промыслы Костромской губернии. Работа с QGIS и интеграция информации из разных источников показывает высокий уровень профессионализма и увлеченности. Это действительно вдохновляет на дальнейшее изучение генеалогии и исторической географии. Спасибо за подробное объяснение процесса и за возможность увидеть такой крутой результат!
Real_Fermer
18.07.2024 16:42+1похоже ребята словили хабр эффект. ;) Зашел на сайт. Сайт еле дышит. :) попробую через пару дней посмотреть свою генеалогию
PereslavlFoto
18.07.2024 16:42сделали карту исторических промыслов Костромской губернии
По каким типовым лицензиям вы разрешаете неограниченному кругу лиц использовать ваши карты любым способом и для любых целей?
Спасибо.
lasternic Автор
18.07.2024 16:42Спасибо за вопрос!
Мы пока в основном занимались сбором данных и карт на текущий момент выпустили, к сожалению, не так уж много. К примеру, есть ещё небольшая серия карт с зонами, где мы похожим образом рассчитали, где было крепостное право и где его не было. Все эти карты можно использовать по CC BY-NC-SA.PereslavlFoto
18.07.2024 16:42Но ведь некоммерческая лицензия полностью запрещает любое использование ваших карт в промышленности. Получается, что их нельзя вообще никак использовать для работы с клиентами.
И более того: некоммерческая лицензия лишена смысла, потому что повторяет те разрешения, которые указаны в 1274 статье Гражданского кодекса. Там уже позволено всё, что вы позволяете.
Прошу вас, пожалуйста, выпускайте ваши карты по лицензиям, которые позволяют всем предприятиям использовать карты любым способом и для любых целей.
Harvester31
18.07.2024 16:42+2Спасибо за интересную статью! Попробуйте воспользоваться сервисом от NextGIS.ru, по крайней мере там таких проблем с объемом нет и есть обмен данными с QGIS. Многие исследовательские команды ими пользуются.
Linashed
18.07.2024 16:42Спасибо огромное за статью! Очень интересно было читать и смотреть на получившийся результат. Подскажите, можно ли ознакомиться с данными в excel формате, тоже очень хотелось бы покопаться.
Сам по профессии айтишник, но также увлекаюсь историей, может знаете людей/проекты, которым можно помочь со стороны айти
lasternic Автор
18.07.2024 16:42Спасибо!
К сожалению, эксель передать не смогу, так как данные принадлежат компании, но если вас что-то конкретное интересует, то можем сгенерировать другую карту.
Касательно вашего второго вопроса, мне кажется, таких проектов довольно много, потому что в большинстве случаев историки и краеведы не работают с базами данных в чистом виде, но те сведения, с которыми они работают, вполне подлежат категоризации. Например, у нас есть замечательная местная группа Старая Вологда, где уже накопилась внушительная коллекция из 46 тысяч пользовательских фотографии. Само собой, по этому массиву уже сложно что-то искать вручную, так как они максимум категоризированы по периодам, улицам и фотографам. Один мой знакомый спарсил все комментарии и описания к фото и сделал небольшую поисковую систему чисто по этой группе, стало гораздо удобнее.PereslavlFoto
18.07.2024 16:42из 46 тысяч пользовательских фотографии
Причём фотографы никак не разрешили использовать этот материал, да? И каждый раз, чтобы использовать такие фотографии в книге или другом промышленном проекте, приходится ехать в Вологду, искать фотографа и подписывать договор?
lasternic Автор
18.07.2024 16:42Затрудняюсь ответить на ваш вопрос, так как я никак не связан с группой Старая Вологда и не испытывал необходимости использовать опубликованные там материалы по работе. То есть под «у нас» я имел в виду «у нас в Вологде», не более того.
huliganov
Очень кропотливая работа проделана. Интересно было почитать о процессе.
Насколько интереснее были бы всякие сухие статистические данные, если бы их представляли в виде различных карт и инфограмм.