Подробная и точная карта мира является для нашей компании одним из краеугольных камней. Это основа, точка отсчёта, своеобразное начало координат. Поиск и выбор жилья нашими пользователями начинается именно с анализа нашей карты. И несмотря на обилие картографических сервисов, существующих в мире, нам всё же пришлось в своё время создавать свою собственную карту.
Нашего единственного штатного картографа зовут Зак Уокер (Zach Walker). Он отвечает за формирование карты, нанесения всевозможных объектов и границ. Почему же мы пошли по пути наибольшего сопротивления и развиваем собственную карту, вместо того, чтобы адаптировать под себя одно из существующих решений?
Всё дело в AT-AT. Это программный инструмент, который мы разработали для создания схемы взаимосвязей локаций, их влияния друг на друга. Выглядит это так:
Нас постоянно интересует, как люди делают выбор, рассматривая места на карте, где они никогда в жизни не бывали? Как они их себе представляют? Как вы выбираете идеальный маршрут путешествия и место для проживания, глядя на одну лишь карту?
Текущие решения
Со своей стороны, мы стараемся помочь нашим пользователям несколькими разными путями:
- Когда вы ищете жильё, то, тем самым, помогаете нам улучшить алгоритм подбора оптимальных мест. Соответственно, будущим пользователям он может предложить ещё более соответствующие их вкусам варианты.
- Когда вы выбираете места, которые хотели бы посетить, наш гид по районам компонует редакционный контент с отобранной вручную необходимой информацией об этих местах, и добавляет профессиональные фотографии. Такие подборки позволяют гораздо полнее узнать об интересующих вас уголках планеты не вставая с кресла.
- Наша исследовательская команда разрабатывает сложные алгоритмы машинного обучения и обработки информации на различных языках, чтобы в автоматическом режиме собирать информацию из обзоров, листингов и поисковых шаблонов. Это позволяет нам гораздо точнее угадывать пожелания пользователей и предлагать более релевантные подборки вариантов для проживания.
- Мы предлагаем пользователям всевозможные советы и рекомендации от владельцев жилья.
Всё вышеперечисленное призвано помочь путешественникам узнать те или иные места не только с «туристической» точки зрения, не однобоко. Ведь шаблонные обзоры и путеводители обычно дают очень узкое и поверхностное представление о странах и городах.
Зелёным выделены традиционные «туристические» места проживания, красным — жильё из базы Airbnb.
Конечно, наша главная задача заключается в том, чтобы предложить пользователю именно те места для проживания, которые лучше всего удовлетворяли бы его пожеланиям. С другой стороны, нам нужно как-то выделить миллионы уникальных листингов, размещённых на нашем сервисе хозяевами по всему миру.
Что дальше?
Гид по районам будет полезен только в том случае, если вы ищете идеальное место для проживания. Но на карте не обозначены многие районы, интересные с точки зрения культуры и истории. И не потому, что у нас не доходят руки, просто обычно такая информация известна лишь местным жителям. Причём под «районом» мы подразумеваем не административную городскую единицу. В данном случае районом может быть часть города, расположенная вдоль дороги, пересекающей три «классических» района. Или это может быть конгломерат из нескольких «классических» районов.
В обязанности Зака Уокера как раз и входит поиск и нанесение на карту подобных мест, чьи границы очерчены именно по культурно-контекстному принципу, а не административно-территориальному. Для этого Зак изучает различную историческую информацию, расспрашивает местных жителей и переписывается с владельцами жилья. Так что, когда пользователь вводит запрос по какому-то региону, ему предлагаются варианты из разных частей этого региона, а не только самых популярных.
Когда мы приступили к разработке этого механизма, то выяснилось, что наша текущая архитектура и инструментарий не позволяют внедрить подобный функционал. Так мы пришли к необходимости создания вышеупомянутого AT-AT.
Проект AT-AT
Нам нужен был инструмент, облегчающий задачу нанесения на карту подобных районов. Кстати, название AT-AT позаимствовано из «Звёздных войн», если помните, так назывались шагающие танки.
Схематически состав АТ-АТ можно представить следующим образом:
В первую очередь, нам нужно было обобщить существующую систему, чтобы она смогла обрабатывать различные географические полигоны (континенты, регионы, страны, области, специальные районы, маленькие городки и деревни), а не только мегаполисы и административные районы.
Взаимосвязи
После того, как полигон создан, бэкэнд вычисляет:
- Родительские полигоны более высокого класса: полигоны, содержащие этот полигон (Сан-Франциско содержит в себе район SoMa).
- Соседние полигоны того же класса: имеющие общую границу или частично накладывающиеся (района SoMa и ярмарка Folsom Street).
- Широту и долготу центроида полигона.
Навигация
Управляться с картой, заполненной всевозможными районами, может быть слишком тяжело. Опытным путём мы пришли к различным режимам отображения, при которых рабочий интерфейс становится прозрачным.
Наши разработчики даже сформировали негласные внутренние правила при работе с AT-AT:
1) Не ломай кнопку «назад»
2) Рендери только то, что необходимо
3) Отображай информацию по мере надобности
4) Уйди с дороги!
При одиночном клике мыши выбирается полигон и рендерятся только соседние полигоны:
А при двойном клике происходит фокусирование на выбранном полигоне:
Заключение
Очевидно, что в работе над таким сложным проектом, как сервис Airbnb, приходится использовать различные внутренние инструменты. АТ-АТ лишь один из многих, он облегчает первичную задачу по нанесению на карту районов, которые потом используются другими нашими сервисами и инструментами. И, создавая свои собственные вспомогательные инструменты для работы над какими-то большими проектами, не забывайте, что невозможно предсказать все будущие сценарии использования.
Автор: AirbnbHabr