Един от проблемите, с които се сблъскваме при създаването на приложение за уеб карти, е възможно най-бързото показване на пространствената информация.

Форматът GeoJSON е по-лек от стандарта GML и също така избягва проблема между кръстосаните домейни.

Сега тази проста архитектура може да има проблем: обектът GeoJSON все още е много тежък (поради броя на цифрите, използвани за кодиране на координатите в текстов формат) и следователно картата отнема много време за показване на данните.

Проблемът е, че уеб прегледът представлява всяка една от геометриите, следователно колкото по-голям е броят на върховете, толкова по-бавна ще бъде картата (25 KB на точка).

Нека видим някои трикове за намаляване на размера на GeoJSON и подобряване на скоростта на нашето приложение за уеб карти:

TopoJSON е разширение GeoJSON, което кодира топологията.

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

TopoJSON количествено определя координатите, по този начин всяка дъга се дефинира от нейните квантовани координати. Квантуването се състои от преобразуване на линия, което се състои от скала и превод, който преобразува координатите с десетична част в цели числа.

Благодарение на премахването на съкращенията и количественото определяне на координатите, Файловете TopoJSON са с 80% по-малки от техните еквиваленти GeoJSON.

Преобразуване на TopoJSON в GeoJSON

Най-простото е да се използва уебсайтът shpescape.com, който ни позволява да трансформираме файлове с шейпфайли в GeoJSON и TopoJSON.

  • Премахнете всички атрибути, които няма да използвате в приложението.
  • Също така премахнете празното пространство.
  • Премахване на прекъсванията на линиите.

В следващия пример виждаме как имаме повтарящи се ключове (ИМЕ, LATITUDE, LONGITUDE, POP_MAX)

Решение за свиване и компресиране на файла премахнете тези ключове и създайте индекс в заглавката. Резултатът ще бъде нещо подобно:

За да извършим тази компресия, имаме инструменти като HPack или CJSON, и двете предлагат коефициенти на компресия, които са около 60-70%.

Един от най-ефективните варианти за намаляване на размера на GeoJSON е опростяване на вектор. По този начин се освобождаваме от детайли, които не са ни необходими. Това опростяване би послужило за линии и полигони.

За да опростим линии или полигони, можем да използваме настолен ГИС клиент.

GRASS е идеалният инструмент за тази операция, тъй като като топологичен ГИС, ние не губим съседство, така че корекцията ще бъде запазена дори при високи нива на опростяване. Въпросният алгоритъм е v.generalize.

За грубо опростяване можем да използваме онлайн инструмент, като mapshaper, който ни позволява да изглаждаме линии или да премахваме възли от файл shp, geojson или topojson.

Най-простият начин да подобряване на скоростта на изобразяване на точки е да се използва приставка, която ги групира заедно. Тази опция спомага за подобряване на изобразяването от страна на клиента до голяма степен, тъй като означава, че клиентският браузър не трябва да тегли 10 000 точки, а само между 10 и 50.

Сред приставките за листовка намираме 5 за тази цел:

От всички тях искаме да подчертаем PruneCluster, защо? Защото той е способен да представи 1 000 000 маркера само за 1,9 секунди на първия си дисплей и за 400 милисекунди на следващите.

geojson

Освен това групите могат да се актуализират в реално време. Той е идеален за живи ситуации.

Други предимства на този плъгин:

  • Можем да посочим теглото на всеки маркер.
  • Посочете категория за отметки. По този начин можем да създадем икони, адаптирани към нашето съдържание.
  • Размерът на групата може да се регулира в движение
  • Отметките могат лесно да бъдат филтрирани без разходи за производителност.

Друга възможност е да създадете Heatmaps или топлинни карти, както видяхме в урока за създаване на топлинни поля с OpenLayers, A heatmap помага на представянето в браузъра на клиента, тъй като не е необходимо да се изчертават всички точки, а само тези, които са показани на този момент.

Използвайте бърз преглед на уеб карти

API като Leaflet извършва бързо и интелигентно изобразяване както на линии, така и на полигони. Чрез опростяване и динамично изрязване можем да визуализираме обекти с хиляди точки.

Избягвайте да работите с GeoJSON

Една от опциите може да бъде да го занесете на външен теселиран сървър. Например TileMill.

Въпреки че, разбира се, най-добре е да създадем цялостна архитектура, съставена например от PostGIS + GeoServer + GeoWebCache + избрания от нас API на карти. Онлайн курсът за уеб картиране ще ви помогне да решите кой вариант е най-добрият.

Не забравяйте, че карта, която отнема време за показване на космически обекти, вероятно няма да се отвори ...

Използвайте векторни плочки

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

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

Също така ви оставяме интересен коментар, който Абел Васкес Монторо ни е оставил в LinkedIn:

Ако целта е да се облекчи векторният обмен на данни както по скорост, така и по размер, оптималната опция срещу суровия GeoJSON е да се използват буфери на протоколи и да се управляват всички обмени в PBF. Подобренията на скоростта (до 300% по-бърза) и размера (до 90% по-малки) си заслужават усилията за промяна на форматите както на клиент, така и на сървър.