Кадый день вы совершаете почти одни и те же действия - просыпаетесь, чистите зубы, завтракаете, кто-то из вас отводит детей в садик или начальную школу, потом вы идете на работу, возвращаясь с работы вы идете на спортивную тренировку, заходите в магазин или в пункт выдачи заказов и возвращаетесь домой. На выходных идете в парк или в торговый центр на шоппинг, возможно в театр или ночной клуб.
Поиски и сравнения места для жительства включают в себя оценку окрестностей вокруг. А можно пойти с обратной стороны и присмотреть дома где все нужное вам по соседству. Чтобы меньше времени проводить в дороге и больше моментов жизни было с пользой.
Моя программа расчитала десятки миллионов пешеходных дистанций от жилых зданий Москвы в 2км от метро и опубликовал их на Github в виде поисковика жилья для гиков. Про который я рассказал в прошлой статье.
Если интересуют технические подробности про обработку данных, можете почитать мои статьи здесь "Где в Москве жить «неплохо»", "Где 15 минут пешком от дома до метро в Москве", "Жилье в 500м от сетевых продуктовых магазинов в Москве.".
Источник геоданных - OpenStreetMap позволяющий любому пользователю редактировать данные, поэтому если вдруг там не обнаружили ваш любимый магазин, школу, площадку для выгула собак или вдруг жилое здание на карте в реальности является зданием магазина... Читайте документацию, хорошо подумайте о правильности ваших правок и только после этого редактируйте данные. Не относитесь просто как потребитель - улучшайте, как вы возможно уже делали в Народных картах от Яндекс. Главное отличие от Народных карт - эти данные вы можете скачивать и анализировать, в этом главная ценность которую дарит проект OSM.
В этой статье я приведу полезные запросы для поиска места жительства.
Синтаксис предикатов для поиска в официальной документации duckdb. В запросе доступны следующие колонки:
Column | Type |
---------------+-----------------+
distance | smallint |
categories | text[] |
name | text |
amenity | text |
leisure | text |
shop | text |
healthcare | text |
tourism | text |
historic | text |
sport | text[] |
education | text |
religion | text |
office | text |
brand | text |
network | text |
operator | text |
Значения для которых можете найти в вики OSM:
Метро
Дома в 500м от входов в МЦК:
network='МЦК' and 'transport'=any(categories) and distance <= 500
Дома в 500м от входов в метро:
network='Московский метрополитен' and 'transport'=any(categories) and distance <= 500
Если вам нужено найти дома у метро или МЦК в 15 минутах ходьбы:
(network='МЦК' or network='Московский метрополитен') and 'transport'=any(categories) and distance <= 1250
Магазины
Жилье в 1.5км от Ашана или Атак:
distance <= 1500 and (shop='supermarket' or shop='convenience') and brand in ('Ашан','Ашан Сити','Атак')
Пятёрочка, ВкусВилл, Дикси, Магнит, Магнолия, Перекрёсток в 500м:
distance <= 500 and (shop='supermarket' or shop='convenience') and brand in ('Пятёрочка','ВкусВилл','Дикси','Магнит','Магнолия','Перекрёсток')
Пункты выдачи
distance <= 1500 and brand in ('Wildberries','Ozon')
Торговый центр в 1.5км от жилья:
distance <= 1500 and shop='mall'
Дети и учеба
Детский садик у дома:
distance <= 500 and amenity='kindergarten'
Школа рядом:
distance <= 1500 and amenity='school'
Коледж недалеко:
distance <= 1500 and amenity='college'
ВУЗ на районе:
distance <= 1500 and amenity='university'
Кафе, рестораны и точка
Кафе
distance <= 1500 and amenity='cafe'
Рестораны:
distance <= 1500 and amenity='restairant'
Фастфуд:
distance <= 1500 and amenity='fast_food'
Медицина
Аптека поблизости:
distance <= 500 and amenity='pharmacy'
Поликлиника:
distance <= 1500 and amenity='clinic'
Больница:
distance <= 1500 and amenity='hospital'
Стоматолог рядом:
distance <= 1500 and amenity='dentist'
Религия
Место где проводят службы:
distance <= 1500 and
amenity='place_of_worship'
Мечеть рядом:
distance <= 1500 and
amenity='place_of_worship' and
religion='muslim'
Можно указать другие конфессии поблизости, например:
distance <= 1500 and
amenity='place_of_worship' and religion='christian'
или religion='buddhist' religion='jewish' religion='hindu'
Места для прогулок
Парки и сады:
distance <= 1500 and (leisure='park' or leisure='garden')
Либо если вам все равно что на открытом воздухе:
distance <= 1500 and 'outdoor'=any(categories)
Спорт
Спортцентр или фитнесс центр поблизости:distance <= 1500 and (leisure='sports_centre' or leisure='fitness_centre')
И можно уточнить какой спорт интересует distance <= 1500 and (leisure='sports_centre' or leisure='fitness_centre') and 'soccer'=any(sport)
или fitness, basketball, tennis, table_tennis, running, athletics, volleyball, yoga, ice_hockey, swimming, gymnastics, hockey, skateboard, chess, futsal, football, badminton
Домашние животные
Площадка для выгула собак без намордников:
distance <= 1500 and
leisure='dog_park'
Ветеренар поблизости:
distance <= 1500 and amenity='veterinary'
Приют для бездомных животных рядом:
distance <= 1500 and amenity='animal_shelter'
Если не хочется жить прямо у ...
Если вам не хочется чтобы что-то было рядом с домом то можете указать это в поле "Что не хотим:"
Не жить близко к инфекционной больнице или психбольнице в поле "Что не хотим:": distance < 300 and'_specialHealthcare'=any(categories)
Дальше 100м от шумных мест "Что не хотим:": distance < 100 and '_noisy_place'=any(categories)
Например жить не ближе 300м от метро или МЦК в поле "Что не хотим:": distance < 300 and (network='МЦК' or network='Московский метрополитен') and 'transport'=any(categories)
Технологии
База данных DuckDB Wasm работает прямо в вашем браузере и запрашивает исходные данные с GitHub Pages, поэтому производительность зависит от сетевого соединения и вашего браузера. Но это же дает гибкость и возможности формулировать запросы так, как вам хочется, почти любой сложности, ведь DuckDB Wasm - полноценная аналитическая база данных. И неявное следствие из архитектуры системы - мне не нужно платить за хостинг некомерческого проекта и придумывать способы монетизации. Как следствие для вас - пользователей не будет типичной для онлайн карт бизнес модели "кто заплатил больше, того и чаще и лучше показали" а не то что искали.
Отрисовка карты происходит с помощью WebGL виджета MapLibre GL JS. Данные загружены с OpenStreetMap, предобработаны в OpenStreetMap H3 базе данных PostGIS и выгружены в parquet файлы.
Информацию по разметки данных вы можете найти в вики OpenStreetMap, либо спросить в комментариях к статье.
Спасибо
Надеюсь что этот поисковик вам пригодится https://igor-suhorukov.github.io
Комментарии (10)
freeExec
17.11.2023 09:49Не стоит завязываться исключительно на brand, он появляется если данные вносят с помощью шаблонов, а это не всегда так. Руками не кто бренд не добавляет и уже тем более всякие викидаты и инстаграммы.
igor_suhorukov Автор
17.11.2023 09:49Я готов выслушать вариант как правильно сделать эту часть запроса, чтобы работала всегда на 100%.
mikegordan
17.11.2023 09:49хорошо бы если вы ответили на 2 и 3й пункт (вроде это быстро) )))
AlexGluck
17.11.2023 09:49Я отвечу вам за него. Это опенсорс, вам здесь не рады.
igor_suhorukov Автор
17.11.2023 09:49Я отвечу вам за него.
— Вы, чего, и конфеты за меня есть будете? — Ага! (c)Двое из ларца
Это опенсорс, вам здесь не рады.
Подмена понятий. Причина конкретно случае в другом: когда по-человечески общаются, то и ответить в радость! А с некоторыми товарищами и врагов не надо)
mikegordan
очень долго выполняются запросы.. минуты 3 на запрос про
distance <= 1500 and shop='mall'
И правильность вызывает большие сомнения. Смотрите вокруг Авиапарка большая часть как раз жилых отмечена как неподходящая, сервис выделил зеленым только какие то дома на юго-востоке , бред в общем.
2) и еще такой вопрос, есть запрос для выбора здания где работают IT компани? Тоесть выбрать места где больше всего скоплений IT компаний , ну или бизнес центров на крайняк
3) не нашел даже в ваших предыдущих статьях что такое фильтр "опасность" ?
freeExec
Потому что "Авиапарк" в данных потерялся
igor_suhorukov Автор
Отвалились мультиполигоны, прикрученные синей изолентой. Ищу как догрузить только эту часть данных
igor_suhorukov Автор
3) ищите по строке "опасность" в статье указаной здесь первой. Это действительно быстро
2) не знаю, поищу как с данными мультиполигонов закончу
У меня встречный вопрос, почему вы неуважительно относитесь к моему труду? Потому что он бесплатный и не покупали подписку на этот сервис и данные достались бесплатно? Спасибо, уважаемый читатель. После этой фразы мне сразу же "захотелось" отвечать на все ваши вопросы.
igor_suhorukov Автор
Данные для мультиполигонов догрузил и карту обновил.
Не интересовался этой темой, так как фокус был на то что нужно для жизни, а не работы в офисе. Сейчас работа в офисе скорее исключение из правил для программистов. Соответственно, в расчитанных POI таких объектов пока не было. Формально при наличии данных должен сработать следующий предикат:
Посмотрю как в будущем изменить модель данных, чтобы запросы работали быстрее, возможно сохраню предрасчитанные агрегаты по типовым запросам.
Спасибо что нашли проблему в данных!