Airbnb
Компания
40,27
рейтинг
27 февраля 2015 в 09:11

Разработка → Создавая карту мира



Подробная и точная карта мира является для нашей компании одним из краеугольных камней. Это основа, точка отсчёта, своеобразное начало координат. Поиск и выбор жилья нашими пользователями начинается именно с анализа нашей карты. И несмотря на обилие картографических сервисов, существующих в мире, нам всё же пришлось в своё время создавать свою собственную карту.

Нашего единственного штатного картографа зовут Зак Уокер (Zach Walker). Он отвечает за формирование карты, нанесения всевозможных объектов и границ. Почему же мы пошли по пути наибольшего сопротивления и развиваем собственную карту, вместо того, чтобы адаптировать под себя одно из существующих решений?

Всё дело в AT-AT. Это программный инструмент, который мы разработали для создания схемы взаимосвязей локаций, их влияния друг на друга. Выглядит это так:



Нас постоянно интересует, как люди делают выбор, рассматривая места на карте, где они никогда в жизни не бывали? Как они их себе представляют? Как вы выбираете идеальный маршрут путешествия и место для проживания, глядя на одну лишь карту?

Текущие решения


Со своей стороны, мы стараемся помочь нашим пользователям несколькими разными путями:

  • Когда вы ищете жильё, то, тем самым, помогаете нам улучшить алгоритм подбора оптимальных мест. Соответственно, будущим пользователям он может предложить ещё более соответствующие их вкусам варианты.
  • Когда вы выбираете места, которые хотели бы посетить, наш гид по районам компонует редакционный контент с отобранной вручную необходимой информацией об этих местах, и добавляет профессиональные фотографии. Такие подборки позволяют гораздо полнее узнать об интересующих вас уголках планеты не вставая с кресла.
  • Наша исследовательская команда разрабатывает сложные алгоритмы машинного обучения и обработки информации на различных языках, чтобы в автоматическом режиме собирать информацию из обзоров, листингов и поисковых шаблонов. Это позволяет нам гораздо точнее угадывать пожелания пользователей и предлагать более релевантные подборки вариантов для проживания.
  • Мы предлагаем пользователям всевозможные советы и рекомендации от владельцев жилья.


Всё вышеперечисленное призвано помочь путешественникам узнать те или иные места не только с «туристической» точки зрения, не однобоко. Ведь шаблонные обзоры и путеводители обычно дают очень узкое и поверхностное представление о странах и городах.


Зелёным выделены традиционные «туристические» места проживания, красным — жильё из базы Airbnb.

Конечно, наша главная задача заключается в том, чтобы предложить пользователю именно те места для проживания, которые лучше всего удовлетворяли бы его пожеланиям. С другой стороны, нам нужно как-то выделить миллионы уникальных листингов, размещённых на нашем сервисе хозяевами по всему миру.

Что дальше?


Гид по районам будет полезен только в том случае, если вы ищете идеальное место для проживания. Но на карте не обозначены многие районы, интересные с точки зрения культуры и истории. И не потому, что у нас не доходят руки, просто обычно такая информация известна лишь местным жителям. Причём под «районом» мы подразумеваем не административную городскую единицу. В данном случае районом может быть часть города, расположенная вдоль дороги, пересекающей три «классических» района. Или это может быть конгломерат из нескольких «классических» районов.

В обязанности Зака Уокера как раз и входит поиск и нанесение на карту подобных мест, чьи границы очерчены именно по культурно-контекстному принципу, а не административно-территориальному. Для этого Зак изучает различную историческую информацию, расспрашивает местных жителей и переписывается с владельцами жилья. Так что, когда пользователь вводит запрос по какому-то региону, ему предлагаются варианты из разных частей этого региона, а не только самых популярных.

Когда мы приступили к разработке этого механизма, то выяснилось, что наша текущая архитектура и инструментарий не позволяют внедрить подобный функционал. Так мы пришли к необходимости создания вышеупомянутого AT-AT.

Проект AT-AT


Нам нужен был инструмент, облегчающий задачу нанесения на карту подобных районов. Кстати, название AT-AT позаимствовано из «Звёздных войн», если помните, так назывались шагающие танки.



Схематически состав АТ-АТ можно представить следующим образом:



В первую очередь, нам нужно было обобщить существующую систему, чтобы она смогла обрабатывать различные географические полигоны (континенты, регионы, страны, области, специальные районы, маленькие городки и деревни), а не только мегаполисы и административные районы.



Взаимосвязи




После того, как полигон создан, бэкэнд вычисляет:
  • Родительские полигоны более высокого класса: полигоны, содержащие этот полигон (Сан-Франциско содержит в себе район SoMa).
  • Соседние полигоны того же класса: имеющие общую границу или частично накладывающиеся (района SoMa и ярмарка Folsom Street).
  • Широту и долготу центроида полигона.


Навигация


Управляться с картой, заполненной всевозможными районами, может быть слишком тяжело. Опытным путём мы пришли к различным режимам отображения, при которых рабочий интерфейс становится прозрачным.

Наши разработчики даже сформировали негласные внутренние правила при работе с AT-AT:
1) Не ломай кнопку «назад»
2) Рендери только то, что необходимо
3) Отображай информацию по мере надобности
4) Уйди с дороги!

При одиночном клике мыши выбирается полигон и рендерятся только соседние полигоны:



А при двойном клике происходит фокусирование на выбранном полигоне:



Заключение


Очевидно, что в работе над таким сложным проектом, как сервис Airbnb, приходится использовать различные внутренние инструменты. АТ-АТ лишь один из многих, он облегчает первичную задачу по нанесению на карту районов, которые потом используются другими нашими сервисами и инструментами. И, создавая свои собственные вспомогательные инструменты для работы над какими-то большими проектами, не забывайте, что невозможно предсказать все будущие сценарии использования.

Автор: @AirbnbHabr
Airbnb
рейтинг 40,27
Компания прекратила активность на сайте

Похожие публикации

Комментарии (3)

  • 0
    Пользуясь случаем проведу опрос — хотели ли бы вы такую карту административных делений?
    Районы-Кварталы-Жилые массивы.
    В общем как Модуль Регионов АПИ Яндекс.Карт, только с округами Парижа?
    • 0
      нам в pastvu.com очень надо :)
      • +1
        В начале спасибо за pastvu и подгрузку данных через сокеты. А потом идем на статью от сегодня habrahabr.ru/post/253515/
        И не забывайте что регионы без NestedSet Tree будут тупить на уровне выборки данных.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка