RE:CYCLE - интересен и малък алгоритъм за покритие

За проекта RE:CYCLE ни трябваше да зареждаме точки малко по малко, а не всичко наведнъж.

И за да не се повтаря зареждането на едни и същи точки, трябваше да знаем какво вече е заредил потребителя. Тази задача на следенето какво е заредил и какво не се оказа не много проста. Един вид трябва да изградим покритие на това което е видял потребителя.

За покритието се помисли относно случаите:

За решението:

  1. когато потребителят зареди първи път сайта му се зареждат точки от район 9 пъти по-голям от видимия на екрана му. От всяка страна на екрана му по още един екран. Нещо такова: Екрани

Това прави покритието в размери на 9 екрана, за да може, ако човек мръдне екрана малко да не трябва веднага да се прави зареждане.

  1. когато потребителят излезе извън началното покритие (било то с zoom, доста мърдане или въвеждане на нов адрес далеч от текущния) се проверява дали четирите ъгъла на видимия екран попадат в покритието, ако не попадат, тогава се прави ново зареждане за точки. Зареждането е отново в размер 9x текущия екран. Паралено с това, новозареденият район се слива със стария, за да се опресни покритието.

За изграждането и поддържането на покритието се се сливат райони с различни размери, различни правоъгълници в размери на екрана, с различен zoom. За да стане това сливане се използва библиотека за манипулация на вектори: Clipperjs.

Ето как би изглеждало покритието от 2 слети района ако потребителят е заредил сайта в центъра на София и е преместил картата на югоизток:

А ето и кода за покритието:


comments powered by Disqus