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

в 6:11, , рубрики: Блог компании Airbnb, Геоинформационные сервисы, карта

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

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

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

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

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

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

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

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

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

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

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

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

Что дальше?

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

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

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

Проект AT-AT

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

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

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

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

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

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

Взаимосвязи

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

После того, как полигон создан, бэкэнд вычисляет:

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

Навигация

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

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

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

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

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

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

Заключение

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

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

Автор: AirbnbHabr

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js