Алгоритм Google Map (Ajax, Tiles и т. Д.) - PullRequest
3 голосов
/ 27 августа 2011

Я работаю над приложением, которое отображает большое изображение примерно так же, как Google Maps. Когда пользователь перетаскивает карту, загружается больше изображений, поэтому, когда видна новая часть карты, соответствующие изображения уже на месте.

Кстати, это проект Javascript.

Я думаю представить каждую плитку в виде квадратного div с изображением, загруженным как фоновое изображение.

Мой вопрос: как именно я могу рассчитать, что показывают div, и когда плитки перемещаются, как я могу узнать, когда новая строка div стала видимой?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 27 августа 2011

О вычислении того, что показывают div: изучите алгоритм пересечения двух прямоугольников (вопрос stackoverflow Алгоритм обнаружения пересечения двух прямоугольников? является хорошей отправной точкой). При этом отображаемые div - это те, чье пересечение с «окном просмотра» не пусто .

О том, как сообщить, когда новая строка div стала видимой: в любом случае, вам, вероятно, понадобится метод updateInterface (). Используйте этот метод для отслеживания отображаемых элементов div, а когда элементы div, которые не отображались до этого, входят в окно просмотра, запускайте своего рода обработчик событий.

О реализации: у вас, вероятно, должно быть, чтобы окно просмотра было само по себе div с overflow: hidden и position: относительным. Наличие атрибута относительной позиции в CSS означает, что дочерний элемент с абсолютной позицией top 0, left 0 будет в верхнем левом краю контейнера (область просмотра, в вашем случае).

Об эффективности: в зависимости от того, как быстро ваш алгоритм «определите, какие дивы показывают» заканчивается, вы можете попытаться обработать обнаружение пересечения только тогда, когда пользователь прекращает перетаскивание, а не движение мыши. Вам также следует предварительно загрузить области непосредственно вокруг текущего окна просмотра, чтобы, если пользователь не перетащил слишком далеко, они уже были загружены.

Некоторые дальнейшие ссылки:

1 голос
/ 27 августа 2011

Нет никакой причины, чтобы реализовать это самостоятельно, если только это не забавный проект. Есть несколько библиотек с открытым исходным кодом, которые обрабатывают онлайн-сопоставления.

Чтобы ответить на ваш вопрос, вам нужно иметь изображение ортофотоплана (изображение, выровненное по координатному пространству), а затем сопоставление пиксельных координат (то есть экрана) с мировыми координатами. Если это не изображения карты, а произвольные большие изображения, то, опять же, вам необходимо создать отображение между пиксельными координатами исходного изображения при различных уровнях масштабирования и координатами порта просмотра.

Если вы прочитаете документацию Google Map SDK, вы увидите объяснения этих терминов. Также хорошей идеей будет изучить одну из вышеупомянутых существующих библиотек, прочитать ее документацию и посмотреть, как это делается.

Но, опять же, если это настоящая работа, не выполняйте ее самостоятельно. Там нет никаких оснований.

...