Vers un protocole de codage des données vectorielles sous forme d'image


16

Ceci est une suite à cette question: Créer des polygones vectoriels avec des performances de rendu comme GISCloud?

Dans sa réponse, Yagi décrit une justification pour coder des informations géographiques dans un format d'image et les décoder dans le navigateur. Il observe qu '"actuellement, pour ce faire, vous devez lancer le vôtre". Il observe également qu'il n'y a actuellement aucune norme pour cela.

Compte tenu des performances impressionnantes démontrées, il semble que la communauté pourrait bénéficier d'un standard. D'après ma compréhension du problème, il semble qu'une façon standard de le traiter pourrait être mise en œuvre. Appelez-le B-WFS.

Ma question, alors: à quoi ressemblerait un protocole utile pour encoder des données vectorielles à l'image? Y a-t-il quelque chose qui rend la tâche trop complexe à aborder utilement, ou s'agit-il simplement de «personne n'a encore fait cela»?


Je suis désolé pour mon ignorance, peut-être que je n'ai pas compris le point, mais, un géotiff avec une table de couleurs ne fait pas le travail?
Pablo

2
Désolé pour mon ignorance aussi;) Je ne sais pas ce qu'est une table de couleurs, mais je ne pense pas. Le but n'est pas de transmettre une image avec les métadonnées correspondantes. Comme vous le mentionnez, c'est un problème résolu. L'objectif est de transmettre des données vectorielles avec des métadonnées dans un format plus compact que l'UTF-8 lisible par l'homme. Étant donné que JavaScript est mal équipé pour traiter les données binaires, la solution de contournement posée consiste à coder les données dans une image binaire et à les décoder à l'aide de HTML 5 Canvas pour décoder l'image, puis la transformer en objets vectoriels.
canisrufus

1
@Pablo En supposant que les E / S réseau (plutôt que l'analyse) sont le goulot d'étranglement dans le traitement des vecteurs sur le Web, avoir une manière établie de traiter les vecteurs codés binaires devrait faciliter l'écriture de cartes Web plus performantes.
canisrufus

Intéressant, maintenant je comprends ... Je commence à travailler avec des webmaps maintenant et j'apprends toujours les bases. BTW, un colortable ou colormap est un tableau qui lie une valeur de cellule raster à une classe.
Pablo

1
@monkut Ouais, c'est différent. :) La pixellisation d'un ensemble de vecteurs ne fait que le rendre. Voila. Raster! Ce dont je parlais dans cette question est différent. Vous devriez lire la réponse de Ragi dans la question à laquelle j'ai lié; cela devrait commencer à expliquer ce que je veux dire. Si vous trouvez que ce n'est toujours pas clair, je vais prendre le temps de trouver une vraie réponse.
canisrufus

Réponses:


5

Il s'avère que c'est un travail inutile. XHR2, qui fait partie des mises à niveau vers javascript, permettra l'importation et l'analyse de données binaires sans forcer quoi que ce soit.


4

Il n'est pas nécessaire qu'il s'agisse d'une norme distincte en tant que telle, car la clause 9.4 de la spécification d'implémentation WFS 04-094 dit:

D'autres formats de sortie (y compris les anciennes versions de GML, non XML, les formats binaires et spécifiques au fournisseur) sont également possibles tant que les valeurs appropriées pour l' attribut outputFormat sont publiées dans le document sur les capacités [article 13]. Cette spécification recommande qu'un récit descriptif [sic] soit inclus dans le document de capacités pour chaque format de sortie qui y est répertorié.

La façon la plus simple d'ajouter un support binaire est de simplement GZIP un flux JSON, où la décompression est gérée automatiquement par la plupart des navigateurs. Cela dit, je ne l'ai pas essayé, mais cela nécessiterait un travail minimal à la fois côté serveur et côté client, en supposant que les deux prennent déjà en charge JSON non compressé.


+1 pour le point sur la norme. Zipper n'est pas un encodage binaire dans le même sens. Les questions sur les implications de performances entre les deux approches, un geojson zippé par rapport aux géométries codées dans une image, méritent certainement d'être explorées.
canisrufus

Vous avez raison, cela réduit le goulot d'étranglement du réseau, mais met une plus grande charge sur le client et le serveur. Mais le codage des données vectorielles dans une image est, l'OMI, une approche sous-optimale en raison de la longueur variable des données vectorielles. Cela obscurcit également la nature des données vectorielles. Une meilleure approche pourrait être d'avoir deux flux de données parallèles, un pour le vecteur et un pour le raster, qui pourraient être gérés par différents serveurs et périphériques de stockage et qui sont ensuite combinés par le client.
MerseyViking

La question de la longueur variable des données vectorielles peut être traitée essentiellement de la même manière que les réseaux gèrent l'envoi de paquets. Je suis d'accord que c'est sous-optimal, mais nous semblons être poussés à cela par le fait que JS ne gère pas bien le binaire. Je vais juste écrire et mettre en œuvre quelque chose moi-même, car j'ai le temps. Je le mettrai ici quand je ferai fonctionner quelque chose ...
canisrufus

1
Je pense vraiment que Ragi l'a clairement défini dans sa réponse. Je suis d'accord que je ne l'ai pas fait. :) Il se peut que l'hypothèse qu'un format binaire puisse être un format de transfert de données globalement plus rapide soit fausse. La différence pourrait simplement être négligeable. J'ai dit que «les implications en termes de performances… méritent d'être explorées». Évidemment, je ne peux pas simplement définir un format binaire, puis déclarer la victoire. Nous verrons!
canisrufus

1
@MerseyViking Sans avoir à répéter à nouveau ma réponse, permettez-moi de mettre cela en perspective en termes de cycles CPU (car votre hypothèse concerne l'optimisation prématurée). Accès au cache L1 = 1 cycle CPU, L2 = 14 cycles, RAM ~ 250 cycles, disque = 41 000 000, réseau (dépend de la bande passante, donc soyons gentils) = 240 000 000. Les E / S, qu'elles soient basées sur disque ou basées sur le réseau (notre cas), sont des ordres de grandeur plus lents. Comment le déplacement de la charge de la dernière partie du spectre vers la première "prématuré", quelle que soit l'échelle?
Ragi Yaser Burhum,
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.