Города-призраки

Интерактивная карта 21 795 заброшенных городов, покинутых посёлков, затопленных деревень и древних руин со всего мира. Данные из Wikidata, описания из Википедии, фото из Wikimedia Commons. Причина опустения определяется автоматически по тексту статьи.

Карта «Города-призраки» с фильтром по причине опустения
Карта 21 795 мест: фильтры по причине опустения и типу поселения, счётчики по каждой категории.
Карточка места на карте «Города-призраки»
Карточка места: тип, причина, описание из Википедии и фото из Wikimedia Commons.
Города-призраки на телефоне: карточка места и фильтры
Мобильная версия: карточка места и фильтры в нижней шторке.

Проблема

Информация о заброшенных поселениях разбросана по статьям Википедии, форумам сталкеров и локальным краеведческим сайтам. Нет единого места, где можно увидеть все города-призраки на карте, отфильтровать по причине опустения и быстро получить контекст — когда и почему место перестало существовать.

Решение

Карта, которая агрегирует данные из Wikidata (объекты с типом «город-призрак», «заброшенная деревня», «затопленное поселение», «руины», «древний город»), обогащает их описаниями из Википедии и фотографиями из Wikimedia Commons, а затем классифицирует причину опустения по тексту статьи.

Пользователь видит все 21 795 мест на интерактивной карте, может фильтровать по причине (золотая лихорадка, шахты, катастрофа, затопление, война, экономический спад, древние руины) и по типу поселения, искать по названию и открывать случайный город-призрак.

Ключевые решения

  • Wikidata как единый источник. SPARQL-запросы к Wikidata дают структурированные данные: координаты, дату упразднения, тип поселения, ссылку на статью Википедии. Не нужен ручной сбор — база обновляется автоматически.
  • Автоклассификация причин. В Wikidata причину опустения почти никогда не указывают. Алгоритм анализирует описание и текст статьи Википедии, ищет ключевые маркеры (gold rush, mine, dam, flood, earthquake, war, evacuation, economic decline) и присваивает категорию. На странице места видно, по какой фразе сделан вывод.
  • Мультиязычность. Интерфейс на 7 языках (русский, английский, испанский, немецкий, французский, португальский, итальянский). Описание места подтягивается из статьи Википедии на языке пользователя.
  • Производительность с 21K+ маркерами. Кластеризация точек на карте (OpenFreeMap + OpenMapTiles) для плавной работы даже на мобильных устройствах.

Что получилось и где ограничения

На карте 21 795 мест. Причину опустения классификатор определил для 4 990 мест (около 23%): древние руины — 3 436, экономический спад — 375, шахты и рудники — 364, война и выселение — 313, затопление — 222, катастрофа — 184, золотая лихорадка — 96. У остальных 16 805 мест (около 77%) в статье нет достаточно ясной причины, и сайт честно показывает «причина не указана». Данные обновляются из Wikidata раз в неделю.

Чему научил проект

  • Честная классификация лучше красивой. Можно было бы подогнать причину под каждое место. Вместо этого сайт показывает, по какой фразе из статьи сделан вывод, а остальное помечает как неизвестное.
  • Основа карты взята из FilmSpots. Повторное использование стека и конвейера данных ускорило запуск: не пришлось строить карту и выгрузку данных с нуля.
  • Аналитика без cookies. Вместо Яндекс Метрики и Google Analytics я подключил Vercel Web Analytics: она работает без cookies и не собирает персональные данные посетителей.

Стек и роль

Стек: Next.js (Turbopack) · React · TypeScript · OpenFreeMap · Wikidata SPARQL · Wikipedia API · Wikimedia Commons · Vercel

Роль: продукт, дизайн, разработка — полный цикл. От идеи и проектирования данных до деплоя и поддержки.

Статьи по теме

Ссылки