/ / Алгоритъм за мързеливо зареждане на анотациите за разглеждане на карти - ios, maps, mkmapview

Алгоритъм за мързеливи забележки на mapview - ios, maps, mkmapview

Работя върху приложение в Map, което зарежда местоположенияот API. Имам кода изработен така, че когато потребителят пасува значително разстояние, API се търси за местоположения в рамките на x километра, а поясненията се заменят.

Кодирам за iOS, но това се отнася за всяко приложение на картата.

Всичко работи на този етап, но аз съм недоволен от моя алгоритъм за това какво е значително разстояние и какъв радиус на местоположенията да се зареди.Някои неща, през които мисля -

  • Изгледът на картата е правоъгълник, по-висок от широкия.
  • Зареждането на места в рамките на x километра ви дава кръг
  • Потребителите могат да увеличават и увеличават мащаба
  • Потребителите могат да гледат N, S, E, W
  • Презареждането при всяка малка промяна на изгледа ще доведе до лош опит на потребителите - трябва да има праг
  • Трябва да има места извън изгледа, така че потребителите да могат да се придвижват и да увеличават до известна степен преди презареждането
  • При даден правоъгълник в кръг, потребителите, движещи се нагоре или надолу, ще достигнат краищата на кръга по-рано от това, когато се движат наляво и надясно
  • За да запазите ресурсите, не всички места се показват при прекалено голямо увеличение, така че приближаването може да разкрие нови местоположения
  • Намаляването ще разкрие нови местоположения

Някакви предложения за какъв алгоритъм трябва да правя? Търся определяне на следните променливи -

  • Радиус на местата за зареждане на дадена ширина на екрана
  • Праг на промяна (панорама и мащабиране) преди презареждане на петна

Отговори:

1 за отговор № 1

Обичайното решение за растерни карти е да се намалиизображение в плочки и заредете тези "близо", където е зрителят. Можете да направите това за данните си, като заредите допълнителни точки след преместване / мащабиране, без да премахвате това, което е там. Ако вашият код за извличане на новите точки се изпълнява във фонова нишка, потребителят няма да забележи и с всеки панел те винаги ще се окажат в място, което вече има данни за тях и докато те гледат, че отивате и зареждате повече данни за следващия си тиган. Ще трябва да измислите колко далеч могат да направят един ход. Дължината е лесна, просто отнесете надлъжната разлика (т.е. дясно-ляво) и това е доколко те могат да плъзгат пръста си и по този начин картата. Така че ако вашият изглед на картата е широк 1 степенен, вече трябва да имате данни от една степен до карта на ляво и една градуса към лявата карта.Лапидата е по-трудна, тъй като тя се променя, когато се отдалечавате от екватора.отгоре надолу има различно измерване, ако гледате в Шотландия. Принципът е все пак същият. Определете доколко потребителят може да превърта в едно влачене и да има предварително зареждане на тези данни. Ако мислите за 3x3 решетка като телефонна подложка. Изгледът на картата е на бутона 5 и трябва да имате предварително настроени всички съраунд бутони. Изгледът на картата се влачи отстрани, така че сега се гледа на квадрата 6, което трябва да заредите в допълнителния квадрат отвъд това, без да губите данните, които са на екрана. Можете да направите три обаждания вдясно, надясно и надясно, надясно и надясно. или направете едно обаждане и получете всички нови данни в един разговор.

Разбира се, ако вашият призив за извличане на новите данни е aмалко бавно и потребителят може да се движи два пъти, преди да получите отговор може би трябва да извлечете по-голяма площ. Така че ще бъдете в центъра на решетка 5x5 и когато изгледът се придвижи към ръба, трябва да вземете друг ред или колона.

Надявам се това да помогне.