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



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

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

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



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

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


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

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


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


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

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

    Что дальше?


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

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

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

    Проект AT-AT


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



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



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



    Взаимосвязи




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


    Навигация


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

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

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



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



    Заключение


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

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

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

      Самое читаемое