{"id":19054762,"url":"https://github.com/loginchik/moscow-hex","last_synced_at":"2026-04-17T09:31:26.858Z","repository":{"id":229386773,"uuid":"776599170","full_name":"loginchik/Moscow-HEX","owner":"loginchik","description":"3D glyph visualization of Moscow center cadastre buildings data","archived":false,"fork":false,"pushed_at":"2024-03-31T18:33:36.000Z","size":616,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-12T09:26:46.608Z","etag":null,"topics":["3d-graphics","data-visualization","threejs"],"latest_commit_sha":null,"homepage":"https://moscow-hex.vercel.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loginchik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-24T00:11:09.000Z","updated_at":"2025-01-24T03:13:38.000Z","dependencies_parsed_at":"2024-03-31T14:30:59.749Z","dependency_job_id":"a6ba4264-0188-424e-9445-92b6429c9a5f","html_url":"https://github.com/loginchik/Moscow-HEX","commit_stats":null,"previous_names":["loginchik/moscow-hex"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/loginchik/Moscow-HEX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loginchik%2FMoscow-HEX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loginchik%2FMoscow-HEX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loginchik%2FMoscow-HEX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loginchik%2FMoscow-HEX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loginchik","download_url":"https://codeload.github.com/loginchik/Moscow-HEX/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loginchik%2FMoscow-HEX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31923079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T09:10:15.403Z","status":"ssl_error","status_checked_at":"2026-04-17T09:10:14.455Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-graphics","data-visualization","threejs"],"created_at":"2024-11-08T23:39:44.394Z","updated_at":"2026-04-17T09:31:26.839Z","avatar_url":"https://github.com/loginchik.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Moscow HEX\n\n_Основано на кадастровых данных, вдохновлено Uber, создано с помощью Three.js_.\n\n## Структура проекта \n\n```\n.\n├── public\n│   ├── models\n│   │   ├── bird.obj - модель птицы \n│   │   ├── firstFloor.obj - модель первого этажа\n│   │   ├── otherFloor.obj - модель любого этажа, кроме первого \n│   │   ├── shop.obj - модель магазина\n│   │   ├── shoppingCart.obj - модель магазинной тележки \n│   │   └── treeTrunk.obj - модель ствола дерева \n│   └── textures \n│       ├── cartColor.png - текстура цвета магазинной тележки\n│       ├── cartGloosy.png - текстура блестящего магазинной тележки\n│       ├── firstFloor.png - текстура цвета первого этажа\n│       ├── otherFloor.png - текстура цвета любого этажа, кроме первого \n│       └── shopColor.png - текстура магазина \n├── src\n│   ├── cameras \n│   │   ├── Manual_rotating_hex.js - камера с ручным вращением для просмотра шестигранника\n│   │   ├── Manual_rotating_world.js - камера с ручным вращением для просмотра мира\n│   │   └── Self_rotating_world.js - камера с автоматически вращением для просмотра мира \n│   ├── world\n│   │   ├── objects\n│   │   │   ├── Bird.js - класс птицы\n│   │   │   ├── Tree.js - класс дерева \n│   │   │   ├── Building.js - класс здания: содержит строение и четыре дерева перед ним\n│   │   │   ├── Shop.js - класс магазина: содержит строение и n-тележек перед ним \n│   │   │   ├── Sun.js - солнце \n│   │   │   └── Hex.js - класс шестигранника: содержит землю, два строения, магазин и стаю птиц\n│   │   ├── Lights.js - скрипт, где создатся статичные света для освещения мира\n│   │   └── World_scene.js - скрипт, где содержится дочений от Three.js/Scene класс мира\n│   ├── colors.json - файл с цветами \n│   ├── data.json - файл с данными \n│   ├── worldInfoElements.js - файл с содержимым информации о проекте, которая выводится при просмотре мира \n│   ├── Contents.js - скрипт, где создаются все объекты для рендера сцены \n│   ├── Headers.js - скрипт, где создаются header-элементы для текущей сцены \n│   ├── Loading.js - скрипт, где создаются объекты анимации загрузки проекта \n│   ├── Manage_intersections.js - скрипт, где определяются пересечения мыши с шестигранниками при рендере мира\n│   └── Renderer.js - скрипт, где создаётся ключевой обработчик \n├── styles\n│   └── styles.css - стили html-элементов\n├── index.html - основной файл. \n├── main.js - основной скрипт, импортируемый в html\n├── package.json\n├── package-lock.json \n├── README.md\n├── favicon.ico\n└── .gitignore\n```\n\nДля запуска проекта: \n```bash\nnpx vite \n```\n\n## Работа с данными и смысл глифов \n\nИзначальные кадастровые данные о зданиях в пределах ЦАО Москвы поделены на шестигранники \nпо [системе h3](https://h3geo.org/docs) (уровень 7). В рамках каждого шестигранника посчитаны: средняя этажность зданий, \nсредний год постройки зданий, максимальная этажность, год постройки максимальной этажности, доля коммерческой \nнедвижимости и средняя кадастровая стоимость. \n\nСредняя кадастровая стоимость впоследствии была нормализована в рамках имеющихся данных таким образом, чтобы \nизначально минимальный показатель стал равен 0, изначально максимальный показатель — 1. \n\nЭти данные используются для создания глифов. В одном глифе объекты следующие: \n+ здание, этажность которого = средняя этажность. Перед зданием четыре дерева, на которых слева направо количество крон соответствует цифре года, = средний год постройки.\n+ здание, этажность которого = максимальная этажность. Перед зданием четыре дерева, на которых слева направо количество крон соответствует цифре года, = год постройки самого высокого здания. \n+ магазин, количество тележек перед которым, = доля коммерческой недвижимости * 10, округлённая до целого числа (от 1 до 10). \n+ птицы над магазином, количество которых = нормализованная средняя кадастровая стоимость * 100. \n\nШестигранники расположены в соответствии с тем, как они располагаются на карте Москвы, для этого использованы \nнормализованные от центра координаты (варьируются в диапазоне от -1 до 1). \n\n## Мир \n\nМир состоит из подставки, набора шестигранников, построенных на данных, и солнца, которое летает строго с запада на \nвосток по окружности с радиусом, чтобы оно \"заходило\" в вертикальную грань подставки. Эти объекты создаются один раз \nпри первоначальной загрузке страницы, впоследствии используются кэши, если это возможно. \n\nВ основе солнца лежит сфера, текстура на нём — шейдер. В основе большинства объектов лежат заранее созданные в Blender\nмодели и текстуры, которые подгружаются с помощью Three.js. Анимации объектов создаются внутри кода. \n\nПри нажатии и удержании на протяжении 3.5 секунд левой кнопкой мыши на любой из объектов одного шестигранника\nоткрывается его \"приближенный просмотр\": создаётся новая сцена на основе данных выбранного шестигранника. При каждом \nоткрытии такой сцены шестигранник создаётся заново, кэши не используются.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floginchik%2Fmoscow-hex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floginchik%2Fmoscow-hex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floginchik%2Fmoscow-hex/lists"}