Em direção a um protocolo para codificar dados vetoriais como imagem


16

Esta é uma continuação desta pergunta: Criando polígonos vetoriais com desempenho de renderização como o GISCloud?

Em sua resposta, Yagi descreve uma justificativa para codificar informações geográficas em um formato de imagem e decodificá-las no navegador. Ele observa que "atualmente, para fazer isso, você precisa rolar o seu próprio". Ele também observa que atualmente não há um padrão para isso.

Dado o desempenho impressionante sendo demonstrado, parece que a comunidade pode se beneficiar de um padrão. Pelo meu entendimento do problema, parece que uma maneira padrão de lidar com ele poderia ser implementada. Chame de B-WFS.

Minha pergunta, então: como seria um protocolo útil para codificar dados vetoriais como imagens? Existe algo que torna muito complexo lidar com utilidade, ou é apenas um caso de "ninguém fez isso ainda"?


Sinto muito por minha ignorância, talvez eu não tenha entendido, mas um geotiff com tabela de cores não fez o trabalho?
Pablo

2
Sinto muito pela minha ignorância também;) Não sei o que é uma tabela de cores, mas acho que não. O objetivo não é transmitir uma imagem com os metadados correspondentes. Como você mencionou, esse é um problema resolvido. O objetivo é transmitir dados vetoriais com metadados em um formato mais compacto que o UTF-8 legível por humanos. Como o JavaScript está mal equipado para lidar com dados binários, a solução alternativa apresentada é codificar os dados em uma imagem binária e decodificá-los usando o HTML 5 Canvas para decodificar a imagem e depois transformá-los em objetos vetoriais.
Canisrufus 28/10/11

1
@Pablo Presumindo que a E / S da rede (em vez de analisar) seja o gargalo ao lidar com vetores na Web, ter uma maneira estabelecida de lidar com vetores codificados binários deve facilitar a escrita de mapas da Web com melhor desempenho.
Canisrufus 28/10

Interessante, agora entendi ... Estou começando a trabalhar com webmaps agora e ainda estou aprendendo o básico. BTW, um mapa de cores ou colortável é uma tabela que vincula um valor de célula raster a uma classe.
Pablo

1
@monkut Sim, é diferente. :) Rasterizar um conjunto de vetores é apenas renderizá-lo. Voila. Raster! O que eu estava falando nesta pergunta é diferente. Você deve ler a resposta de Ragi na pergunta à qual vinculei; isso deve começar a explicar o que quero dizer. Se você achar que ainda não está claro, levarei algum tempo para encontrar uma resposta real.
Canisrufus

Respostas:


5

Acontece que este é um trabalho desnecessário. O XHR2, parte das atualizações para javascript, permitirá a importação e análise de dados binários sem coagir nada.


4

Ele não precisa ser um padrão separado, pois a Especificação de Implementação WFS 04-094, cláusula 9.4 diz:

Outros formatos de saída (incluindo versões mais antigas de GML, formatos não XML, binários e específicos do fornecedor) também são possíveis desde que os valores apropriados para o atributo outputFormat sejam anunciados no documento de recursos [cláusula 13]. Esta especificação recomenda que uma narrativa descritiva [sic] seja incluída no documento de recursos para cada formato de saída listado lá.

A maneira mais fácil de adicionar suporte binário é apenas GZIP um fluxo JSON, onde a descompressão é tratada automaticamente pela maioria dos navegadores. Dito isso, eu não tentei, mas exigiria um trabalho mínimo no servidor e no cliente, supondo que ambos já suportem JSON descompactado.


+1 por ponto sobre o padrão. Fechar não é uma codificação binária no mesmo sentido. Vale a pena explorar questões sobre implicações de desempenho entre as duas abordagens, um geojson compactado x geometrias codificadas em uma imagem.
Canisrufus 31/10

Você está certo, isso reduz o gargalo da rede, mas coloca uma carga maior no cliente e no servidor. Mas codificar dados vetoriais em uma imagem é, na IMO, uma abordagem subótima devido ao comprimento variável dos dados vetoriais. Também está ofuscando a natureza dos dados vetoriais. Uma abordagem melhor seria ter dois fluxos de dados paralelos, um para vetor e outro para raster, que poderiam ser manipulados por diferentes servidores e dispositivos de armazenamento e depois combinados pelo cliente.
MerseyViking

A questão do comprimento variável dos dados vetoriais pode ser tratada basicamente da mesma maneira que as redes lidam com o envio de pacotes. Concordo que é subótimo, mas parece que somos empurrados para isso pelo fato de o JS não lidar bem com o binário. Vou escrever e implementar algo pessoalmente, pois tenho tempo. Vou colocá-lo aqui quando eu conseguir alguma coisa de trabalho ...
canisrufus

1
Eu realmente acho que Ragi definiu isso claramente em sua resposta. Eu concordo que não. :) Pode ser que a hipótese de que um formato binário possa ser um formato geral mais rápido de transferência de dados esteja incorreta. A diferença poderia ser insignificante. Eu disse que "implicações de desempenho ... valem a pena explorar". Obviamente, não posso simplesmente definir um formato binário e depois declarar vitória. Veremos!
Canisrufus 1/11

1
@MerseyViking Sem ter que repetir minha resposta novamente, deixe-me colocar isso em perspectiva em termos de ciclos de CPU (já que sua suposição é sobre otimização prematura). Acessando o cache L1 = 1 ciclo da CPU, L2 = 14 ciclos, RAM ~ 250 ciclos, Disco = 41.000.000, Rede (depende da largura de banda, então vamos ser gentis) = 240.000.000. A E / S, seja baseada em disco ou em rede (nosso caso), é de ordem de magnitude mais lenta. Como a transferência de carga da última parte do espectro para a primeira é "prematura" em qualquer escala?
Ragi Yaser Burhum 01/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.