Una dintre problemele cu care ne confruntăm atunci când creăm o aplicație de webmapping este afișarea informațiilor spațiale cât mai repede posibil.

Formatul GeoJSON este mai ușor decât standardul GML și, de asemenea, evită problema Cross-Domain.

Acum, această arhitectură simplă poate avea o problemă: obiectul GeoJSON este încă foarte greu (datorită numărului de cifre utilizate pentru a codifica coordonatele în format text) și, prin urmare, harta durează mult timp pentru a afișa datele.

Problema este că vizualizatorul web reprezintă fiecare dintre geometrii, prin urmare, cu cât este mai mare numărul de vârfuri, cu atât harta va fi mai lentă (25 KB pe punct).

Să vedem câteva trucuri pentru a reduce dimensiunea unui GeoJSON și pentru a îmbunătăți viteza aplicației noastre de webmapping:

TopoJSON este o extensie GeoJSON care codifică topologia.

TopoJSOn elimină redundanțele, oferind reprezentări mai compacte ale geometriei decât GeoJSON. De exemplu, granița partajată între două țări este reprezentată o singură dată, în loc să fie duplicată pentru ambele țări, în acest fel, punctele comune sunt reprezentate o singură dată.

TopoJSON cuantifică coordonatele, în acest fel fiecare arc este definit de coordonatele sale cuantificate. Cuantizarea constă dintr-o transformare de linie care constă dintr-o scală și o traducere care convertește coordonatele cu o parte zecimală în numere întregi.

Mulțumită eliminării concedierilor și cuantificării coordonatelor, Fișierele TopoJSON sunt cu 80% mai mici decât echivalentele lor GeoJSON.

Conversia TopoJSON în GeoJSON

Cea mai simplă este utilizarea site-ului web shpescape.com, care ne permite să transformăm fișierele shapefile în GeoJSON și TopoJSON.

  • Eliminați toate atributele pe care nu le veți utiliza în aplicație.
  • Eliminați și spațiul alb.
  • Eliminați întreruperile de linie.

În exemplul următor vedem cum avem taste repetate (NAME, LATITUDE, LONGITUDE, POP_MAX)

O soluție pentru micșorarea și comprimarea fișierului elimină aceste chei și creează un index pe antet. Rezultatul ar fi ceva de genul acesta:

Pentru a efectua această compresie, avem instrumente precum HPack sau CJSON, ambele oferă rapoarte de compresie care sunt în jur de 60-70%.

Una dintre cele mai eficiente opțiuni pentru reducerea dimensiunii unui GeoJSON este simplifica vectorul. În acest fel scăpăm de detalii de care nu avem nevoie. Această simplificare ar servi pentru linii și poligoane.

Pentru a simplifica liniile sau poligoanele putem folosi un client GIS desktop.

GRASS este instrumentul ideal pentru această operație, deoarece fiind un GIS topologic, nu pierdem adiacența, astfel încât corecția va fi păstrată chiar și la niveluri ridicate de simplificare. Algoritmul în cauză este generalizat.

Pentru o simplificare grosolană putem folosi un instrument online, cum ar fi mapshaper, care ne permite să netezim liniile sau să eliminăm nodurile dintr-un fișier shp, geojson sau topojson.

Cel mai simplu mod de a îmbunătățiți viteza de redare a punctelor este de a utiliza un plugin care le grupează împreună. Această opțiune ajută la îmbunătățirea randării în partea clientului într-o mare măsură, deoarece înseamnă că browserul clientului nu trebuie să atragă 10.000 de puncte, ci atrage doar între 10 și 50.

Printre pluginurile pentru Leaflet găsim 5 în acest scop:

Dintre toate, vrem să evidențiem PruneCluster, de ce? Pentru că este capabil să reprezinte 1.000.000 de markeri în doar 1,9 secunde pe primul său afișaj și în 400 de milisecunde pe cele ulterioare.

trucuri

Mai mult, grupurile pot fi actualizate în timp real. Este perfect pentru situații live.

Alte avantaje ale acestui plugin:

  • Putem specifica greutatea fiecărui marker.
  • Specificați o categorie pentru marcaje. În acest fel, putem crea icoane adaptate conținutului nostru.
  • Dimensiunea grupului poate fi ajustată din mers
  • Marcajele pot fi ușor filtrate fără costuri de performanță.

O altă opțiune este de a crea Heatmaps sau hărți de căldură, așa cum am văzut în tutorialul cu privire la crearea de heatmpas cu OpenLayers. acel moment.

Utilizați un vizualizator rapid de hărți web

Un API precum Leaflet efectuează redarea rapidă și inteligentă atât a liniilor, cât și a poligoanelor. Prin simplificare și decupare dinamică, putem vizualiza obiecte cu mii de puncte.

Evitați să lucrați cu GeoJSON

O opțiune poate fi să-l duceți la un server extern teselat. De exemplu TileMill.

Deși, desigur, cel mai bine este să creăm o arhitectură completă, compusă de exemplu din PostGIS + GeoServer + GeoWebCache + API-ul hărților la alegerea noastră. Cursul online de webmapping vă va ajuta să decideți ce opțiune este cea mai bună.

Amintiți-vă că o hartă care necesită timp pentru a afișa obiecte spațiale probabil nu se va deschide ...

Folosiți plăci vectoriale

Plăcile vectoriale creează hărți semnificativ rapide, oferind în același timp o flexibilitate completă în design.

Este vorba de date vectoriale echivalente cu plăcile de imagine pentru webmapping, aplicând avantajele plăcilor la datele vectoriale: dezvoltate pentru stocarea în cache, scalabilitate și servirea rapidă a imaginilor de pe hartă.

Vă lăsăm, de asemenea, un comentariu interesant pe care Abel Vázquez Montoro ni l-a lăsat pe LinkedIn:

Dacă obiectivul este de a ușura schimbul de date vectoriale atât în ​​viteză, cât și în dimensiune, opțiunea optimă împotriva GeoJSON brută este utilizarea protocolului tampoane și gestionarea tuturor schimburilor în PBF. Îmbunătățirile de viteză (cu până la 300% mai rapide) și dimensiunea (cu până la 90% mai mici) fac să merite efortul de a schimba formatele atât pe client, cât și pe server.