Когда я ищу квартиру, для меня важно знать не типовой ли это дом "панелька" 60-90х. Одно время пожив в однокомнатной квартире в "Башне Вулыха" я проникся уважением к этим сериям домов советской эпохи по сравнению панельками. Затем пожил в монолитной новостройке с потолками 3.2м, но со слышимостью как в обычном панельном доме 70х.
Атмосфера
Большую часть своей жизни я прожил в типовых хрущёвках и уж поверьте, я их одновременно и люблю и ненавижу. Много теплых воспоминаний из детства: игры в подвалах, на стройках и обшарпанных игровых площадках с качелями и горками. И тогда это было весело, в тех же районах появились друзья с которыми до сих пор рад общаться. Но при возможности выбирать, теперь я не хочу жить в таком жилье.
Если верить википедии, то не все что выглядит как панельный дом - хрущевка. Строительство хрущёвок изменило советскую архитектуру, сделав её преимущественно промышленной. По сравнению со сталинскими домами, которые строились из кирпича, хрущёвки имели меньшие квартиры с простой и функциональной архитектурой. В то же время, по сравнению с многоквартирными деревянными домами, которые так же массово строились в период сталинского правления, хрущёвки по многим параметрам были лучше и помогли решить острую проблему нехватки жилья. Они строились с 1956 года до середины 1970-х. В конце 1960-х годов хрущёвки стали уступать место брежневкам, но до сих пор остаются одним из самых распространённых типов жилья в странах СНГ.
Unreal Engine 5 отлично передает зимнюю атмосферу типового двора в 3D
Технологии
Интересно было бы посмотреть на карте на застройку столицы определенной серией домов.
Сказано - сделано! Добавил в данные карты Москвы тип проекта здания из OpenStreetMap тег design:ref - чтобы поиск теперь работал и для типовых домов. Поскольку типовых проектов в базе достаточно много, то выбор конкретного варианта серии для здания вынес в отдельный выпадающий список "проект здания":
Если интересует только тип здания, то не нужно писать условия на SQL, достаточно выбрать из выпадающего списка значение и нажать "Найти".
Для сложных пользовательских запросов доступна мощь SQL с логическими выражениями во встраеваемой базе данных DuckDB "под капотом" сайта и для запросов вам доступны поля:
distance SMALLINT
categories ENUM( 'atm', 'attraction', 'bank', 'beach', 'beauty', 'children', 'driving', 'eat', 'education', 'emergency', 'entertainment', 'food', 'healthcare', 'housekeeping', 'nightlife', 'outdoor', 'pet', 'pharmacy', 'religion', 'shop', 'shopping', 'ski', 'sport', 'tourism', 'transport', 'viewpoint','_air_quality', '_dangerous', '_industrial', '_mosquitoes', '_noisy_place', '_sad_place', '_socialReEducation', '_specialHealthcare')[]
design_ref VARCHAR
name VARCHAR
amenity VARCHAR
leisure VARCHAR
shop VARCHAR
healthcare VARCHAR
tourism VARCHAR
historic VARCHAR
sport VARCHAR[]
education VARCHAR
religion VARCHAR
office VARCHAR
brand VARCHAR
network VARCHAR
operator VARCHAR
Примеры запросов, которые можно указать для поиска я приводил в статье "Инфраструктура у жилья в столице". Данных в этой базе о пешей доступности важных для жизни объектов достаточно много чтобы понять где мне хочется жить, а где нет. Можно указать расстояние до магазинов, школы и входа в метро/МЦК, до поликлиники или площадки выгула собак, учесть есть ли поблизости торговый центр, а так же жить в стороне от шума и источников загрязнения воздуха.
Теперь можно комбинировать с предикатом для проекта постройки:distance <= 500 and design_ref='Башня Вулыха' and network='Московский метрополитен' and 'transport'=any(categories)
или просто выбирать тип проекта дома из списка. Или же группировать разные подтипы проектов домов: design_ref ilike 'II-49%'
Когда хочется жить не дальше 500м от торгового центра, но не в панельке серии II-49
, то нужен такой фильтр:
Если открыть консоль разработчика и вкладку Network, то можно наблюдать процесс, как DuckDB Wasm запрашивает из браузер фрагменты данных с Parquet файлов с сервера, считывая только требуемый для операции диапазон объекта по https. Движок базы данных обладает обширным функционалом и "продвинутыми" техниками работы с данными, несмотря на его небольшой размер скомпилированного кода.
Документация по синтаксису SQL выражений для DuckDB можете изучить по ссылке. Синтаксис позволяет писать более сложные конструкции чем =/ or / and / not. А это значит что можно выразить достаточно сложные условия поиска жилья по вашим предпочтениям. И это будет работать пока DuckDB Wasm хватает памяти для хранения промежуточных результатов запроса.
Для выбора типа дома используется html элемент select id="building_type" значение из которого получаю в JavaScript document.getElementById('building_type').value и для сброса в значение по умолчанию при загрузке страницы сбрасываю value=''.
Запрос к данным в DuckDB Wasm формирую в обработчике ('button_filter').onclick = async() => {}:
document.getElementById('button_filter').disabled=true;
try {
const mainFilter = document.getElementById('cust_filter').value;
const buildingFilterSrc=document.getElementById('building_type').value;
const buildingTypeFilter = (mainFilter=='' ? '' :' and ')+(buildingFilterSrc==''?'':'design_ref=\''+buildingFilterSrc+'\'');
const exceptFilter = document.getElementById('cust_filter_minus').value;
const query = await conn.query(baseQuery+mainFilter + (buildingFilterSrc==''?'':buildingTypeFilter) + (exceptFilter? ' except '+baseQuery+exceptFilter:''));
const color=document.getElementById('cust_color').value;
var newGeo ={"type": "FeatureCollection", "features": []};
for(const id of query.toArray().map((row) => row.toJSON().id)){
const building= buildings[id];
if(building){
building.properties.fill=color;
newGeo.features.push(building);
}
}
map.getSource('customDs').setData(newGeo);
} catch(err) {
alert(err);
} finally {
document.getElementById('button_filter').disabled=false;
}
Общий объем данных для поисковика превысил 350Мб и в этих данных есть дополнения по инфраструктуре в шаговой доступности у жилья.
Итог
Обновленный поиск жилья в Москве на основе данных OpenStreetMap доступен на GitHub Pages: https://igor-suhorukov.github.io/moscow_building_type.html Теперь, по крайней мере, можно взглянуть на столицу с высоты птичьего полета и решить в каких домах хочется жить, с учетом данных построен ли дом по типовому проекту.
Dynasaur
Такое впечатление, что у статьи нет начала и конца.
igor_suhorukov Автор
Или вы имели ввиду что-то другое?