Projects‎ > ‎

Построение карт плотности фотографий (Panoramio).


Построение карт плотности фотографий на Panoramio. Идея — komelsky (тут).

Предварительные наработки.

Пробное построение (картинка), сделанное с использованием подручных средств (wget, excel). Разрешение 10x10.

← Это Европа

Суть проекта — изобразить на карте яркими пятнами участки с большим скоплением фотографий. По сути это карта популярных мест. В разных масштабах — в стране, в городе, на материке и т.п.
 
В качестве ресурса, хранящего данные о привязке фотографий был выбран Panoramio. Он дает все необходимые возможности для реализации проекта и обладает самой большой базой фотографий с привязкой, так что альтернативные варианты не рассматривались.

Особенности Panoramio API.

Сервис Panoramio API обладает рядом особенностей, которые немного усложняют процесс построения карт плотности:
  1. API выдает некорректное количество фотографий на максимальном увеличении (на маленьких областях). Данную особенность можно обойти не делая области меньше определенного размера. Чтобы при этом повысить точность построения карты с данной области выбираются координаты всех фотографий и накладываются на карту. Этому, правда, может помешать другая особенность — №2.
  2. API не выдает координаты более 20000 фотографий. В принципе, API может за раз выдать координаты только 100 фотографий и забрать больше можно только постепенно сдвигая окно начальная—конечная фотография (from-to). Если from превысит 20000, то результатом будет 0 фотографий. При этом при from, например, 19000 будет выдватся 100 фотографий и общий count обозначаться как, например, 25000.
  3. API неправильно отрабатывает переход за 180°. Это не так страшно, конечно, но всё равно смешно.

Технология построения карт плотности фотографий.

На основе отмеченных выше особенностей технология выстроилась следующая.

  1. Выбирается регион, например Москва, Россия, Европа и т.п.
  2. Определяется глубина прохода региона, то есть сколько раз данный регион может быть разбит на области.
  3. Определяется критерий дальнейшего разбиения области — количество фотографий при котором область дальше разбивается. Исходя из особенностей API это значение не должно превышать 20000 — в противном случае, выбрать все фотографии с области будет невозможно (особенность №2). Существует так же опасность, что дальнейшее разбиение региона приведет к возникновению особенности №1 API, но пока с таким столкнуться не пришлось.
  4. Производится рекурсивное разбиение региона на области. Первоначальный регион делится на 4 области, далее каждая область, при условии, что в ней фотографий больше чем хотелось бы и не превышена глубина разбиения так же делится на 4 подобласти. В итоге получается набор областей разного уровня разбиения с фиксированными координатами, закодированными в стиле тайлов Google.
  5. Для каждой области производится выборка фотографий, на основании координат которых строится карта. Карта представляет собой массив, равномерно разрезающий область на заданное количество ячеек. Количество этих ячеек уменьшается пропорционально глубине области и определяет размерность полученного изображения. К примеру, при размере карты для региона 1024x1024, первое "разрезание" даст для каждой из 4-х областей карты размером 512x512 и итоговое изображение может быть получено простым "сшиванием" карт. Для того, чтобы итоговая карта имела равномерную яркость производится нормализация, для чего отмечается максимальное значение среди всех ячейки для каждой области, после чего выбирается максимальная ячейка среди всех областей, составляющих регион.
  6. Полученные карты преобразуются в изображения, путем нормализации и применения какого-либо градиента. Далее изображения сшиваются и в итоге получается overlay-изображение покрывающее весь регион.

Полигональное разбиение (карта).

Сами по себе полигональные разбиения довольно наглядны. Каждый полигон очерчивает область с количеством фотографий не превышающим заданный порог - мельче полигоны - больше плотность фотографий.
Для построения карты разбиений Европы-Азии-Африки-Австралии/Океании был выбран порог в 2000 фотографий и 10 уровней разбиения (но разбиение проводилось отдельно для каждого континента).
 
Вот результаты:
 
 
На приведенных каринках используется раскраска от красного к желтому в зависимости от уровня квадрата (читай - размера). Данная раскраска наглядная, но не очень информативная, так как не дает представления о различии между областями одного уровня.

Третий вариант раскраски окрашивает полигоны в зависимости от плотности фотографий в области (количество фотографий деленное на уровень).
Всё это можно посмотреть в Google Earth — KMZ, KMZ, KMZ.
Ещё один вариант сочетающий в себе сетку, которая делает изображение более аккуратным, и правильную раскраску (R/G/B = 11111/0+111/00+11 на "языке" сэмплов, прозрачность "+111"). В виде KMZ.



JPG.

Та же раскраска, плюс к тому — полигоны сделаны "столбами":

Столбы в KMZ, JPG.
Ещё один вариант — неправильные, но эффектные столбы. Неправильные в том ключе, что высота столбов лимитирована 2000 фотографиями.

Карты плотности.

Карты плотности, как отмечено выше, строятся для каждой области, затем нормализуются и объединяются. Первой была построена карта Московской области. Подобная карта позволяет изучать популярность мест на карте вплоть до отдельных районов и улиц:


Крупнее
. На и на такой картинке мало чего поймешь — лучше в KMZ.

Рабочие материалы.

Работы по дальнейшему построению ведутся. На прицеле Европейские города, потом некоторые Российские. Америка меня пока не интересует.
 
Пока работы ведутся можно посмотреть на рабочие материалы - всякий выхлоп, который не тянет на законченный продукт.

Крым
Наложение сделано вручную на карту Google Maps.
Европейская Россия


Москва (первая, вторая). Наложение в Google Earth.

 

Париж.

JPG


Берлин.



Всё легально.

Проект сделан при помощи открытого Panoramio API. И различных продуктов Google — Google Earth, Google Maps, Google SketchUp.
ą
Berlin.jpg
(687k)
Alexander Tchaikin,
Jul 7, 2008, 5:24 AM
ą
Alexander Tchaikin,
Jul 7, 2008, 5:24 AM
ċ
EAAO.A.kmz
(930k)
Alexander Tchaikin,
Jul 4, 2008, 12:33 PM
ċ
EAAO.C.kmz
(1458k)
Alexander Tchaikin,
Jul 4, 2008, 12:35 PM
ċ
EAAO.D.lite.kmz
(723k)
Alexander Tchaikin,
Jul 4, 2008, 12:37 PM
ċ
EAAO.E.kmz
(1463k)
Alexander Tchaikin,
Jul 6, 2008, 2:32 AM
ċ
EAAO.F.nol.kmz
(1821k)
Alexander Tchaikin,
Jul 6, 2008, 9:23 PM
ą
Alexander Tchaikin,
Jul 6, 2008, 9:26 PM
ą
Alexander Tchaikin,
Jul 8, 2008, 6:19 AM
ą
Moscow.jpg
(986k)
Alexander Tchaikin,
Jul 7, 2008, 4:37 AM
ċ
MoscowAndRegion.kmz
(2246k)
Alexander Tchaikin,
Jul 4, 2008, 12:43 PM
ą
Paris.jpg
(656k)
Alexander Tchaikin,
Jul 7, 2008, 3:32 AM
ą
Alexander Tchaikin,
Jul 6, 2008, 9:37 PM
ą
Alexander Tchaikin,
Jul 6, 2008, 9:23 PM
ċ
Alexander Tchaikin,
Jul 4, 2008, 12:48 PM
ċ
Alexander Tchaikin,
Jul 4, 2008, 12:47 PM
ą
Alexander Tchaikin,
Jul 5, 2008, 3:13 AM
ċ
Alexander Tchaikin,
Jul 4, 2008, 12:50 PM
ċ
Alexander Tchaikin,
Jul 4, 2008, 12:50 PM
Comments