Несколько выходных я и Елена Федосихина были заняты созданием сайта http://oldams.nl/. По сути, это геокодированная коллекция фотографий с http://beeldbank.amsterdam.nl/.

Так как именно был создан этот проект?

В прошлом году я участвовал в N8 Hackathon Amsterdam, я до сих пор горжусь проектом, который мы создали в потрясающей команде с Дэвидом Суинстедом, Еленой Борисовой, Филиппом Лисишиным, Полиной Раевской, Ярославом Кравченко, Натальей Розвезевой, Хеленой Гаевской и Владимиром Калмыковым. Мы использовали открытые API, чтобы получить информацию о том, сколько людей у ​​нас есть в музеях Амстердама, чтобы порекомендовать, куда пользователям приложения следует идти, чтобы избежать огромных очередей и в целом получить больше удовольствия от посещения города и размещения большего количества достопримечательностей в более короткие сроки.

Мы до сих пор не опубликовали это приложение, хотя собираемся сделать это в этом году. Но история не о приложении.

После этого хакатона мы знали, что в Амстердаме много публичных городских API, и примерно 2 месяца назад я нашел проект http://oldsf.org/. Вдохновившись тем, что сделали авторы OldSF и зная, что у нас есть API для старых фотографий города и их еще никто не пробовал геокодировать, мы решили создать такой же проект для Амстердама.

Сбор и формирование данных

Beeldbank имеет API OpenSearch, который значительно упрощает импорт исходных данных. Мы использовали http://beeldbank.amsterdam.nl/api/opensearch/ и создали скрипт, который собирал весь контент в базу данных MySQL. В итоге у нас получилась огромная ~360к записей таблица.

Было несколько типов контента. Нас интересовали только фотографии (и планы построек позже). Поэтому мы скопировали таблицу и обрезали ее только до фотографий.

Что было хорошо с базой данных, так это то, что мы сразу получили информацию об адресах:

Итак, мы просто сразу удалили записи без адресов (мы искали эту информацию в полях описания и темы).

На следующем этапе мы переместили адреса в отдельную таблицу и получили пары широта-долгота с помощью API геокодирования.

Первая версия

Первая версия, которую мы запустили, была прототипом. Мы использовали NodeJS и хостинг DigitalOcean, чтобы быстро запустить его. В нем не было никакой кластеризации или чего-то подобного, но предоставлялась возможность хотя бы проверить, какие фотографии есть у ориентиров, размещенных на карте.

Мы показали эту версию друзьям, чтобы получить первые отзывы.

Были неприятные проблемы или просто неприятный опыт с:

  • Отсутствие кластеризации
  • Мы показывали фотографии из используемого CDN Beeldbank — это было очень медленно, иногда люди застревали в ожидании загрузки фотографий на пару секунд.
  • Мы показывали сразу широкоформатные фото (ширина = 500px), оказалось, что люди хотели сначала посмотреть обзор фотографий для достопримечательности и только после этого они хотят увеличить фото, чтобы рассмотреть поближе. Также важна пропускная способность — у нас есть достопримечательности с более чем 100 фотографиями.
  • В какой-то период времени мы перешли на базу данных SQL, так как нам нужно было постоянно добавлять новые фотографии в коллекцию (до сих пор делаем это каждый день)

Текущая версия

Собрав все отзывы о прототипе, мы переписали приложение.

Теперь он работает на Ruby on Rails (мы выбрали RoR для простой готовой миграции базы данных и задач rake, которые мы начали использовать для общения с различными API и уточнения данных) и использует базу данных PostgreSQL. Мы также переключили хостинг с DigitalOcean на Heroku, так как это намного дешевле для нашего варианта использования и позволяет нам масштабироваться по мере необходимости (пока нам это не нужно), не говоря уже об очень простом процессе развертывания.

Мы исправили проблему с загрузкой фотографий из CDN Beeldbank, поместив их в Amazon S3.

А кластеризация решается простым использованием библиотеки Google MarkerClusterer https://github.com/googlemaps/js-marker-clusterer. Он обеспечивает оптимальную производительность даже в мобильном браузере.

Вот и все!

После создания текущей версии мы анонсировали ее друзьям и в социальных сетях, что принесло нам много трафика, и мы до сих пор получаем от 500 до 1200 посетителей в день.

Если вы хотите создать нечто подобное для своего города, обращайтесь к нам — Валерий Яцко и Елена Федосихина.