Diferença entre GeoJSON e TopoJSON

91

Qual é a diferença entre GeoJSON e TopoJSON e quando eu usaria um em vez do outro?

A descrição do TopoJSON no GitHub implica que os arquivos TopoJSON são 80% menores. Então, por que não usar TopoJSON o tempo todo?

Lucas
fonte

Respostas:

150

Se você se preocupa com o tamanho ou topologia do arquivo, use o TopoJSON. Se você não se importa com nenhum dos dois, use o GeoJSON para simplificar.

A principal vantagem do TopoJSON é o tamanho. Ao eliminar a redundância e usar uma codificação de coordenadas inteiras de precisão fixa mais eficiente, os arquivos TopoJSON costumam ser uma ordem de magnitude menores do que os arquivos GeoJSON. A vantagem secundária dos arquivos TopoJSON é que a codificação da topologia tem aplicativos úteis, como simplificação de preservação de topologia (semelhante ao MapShaper ) e geração automática de malha (como nos limites de estado-estado neste exemplo de coroplet ).

Essas vantagens têm um custo: um formato de arquivo mais complexo. Em JavaScript, por exemplo, você normalmente usaria a biblioteca cliente TopoJSON para converter TopoJSON em GeoJSON para uso com ferramentas padrão como d3.geoPath . (Em Python, você pode usar topojson.py .) Além disso, o formato inteiro de TopoJSON requer coordenadas de quantização, o que significa que pode introduzir erro de arredondamento se você não tomar cuidado. (Consulte a documentação para topojson -q.)

Para manipulação de geometrias do lado do servidor que não requer topologia, o GeoJSON é provavelmente a escolha mais simples. Caso contrário, se você precisar de topologia ou quiser enviar a geometria através do fio para um cliente, use TopoJSON.

mbostock
fonte
2
E embora me lembre de ter lido sobre "segmentos de linha compartilhados", ainda presumi que "topo" significava "topografia", o que não é verdade. Aqui está uma boa leitura sobre a diferença entre "topologia" e "topografia" (a primeira é a origem de "topo" em topojson) - e terei que ler o artigo de Mike aqui sobre inferir topologia
The Red Pea
Eu preferiria usar geobuf diferente de soluções híbridas como toposjon quando conectar pela Internet.
tibetty
10

TopoJSON é ideal para recursos organizados que "se encaixam" uns nos outros, como regiões administrativas, mas não ajuda com dados mais confusos ou orgânicos. Se seus dados são simplesmente pontos, o TopoJSON não ajuda em nada.

sgillies
fonte
23
Mesmo quando não há topologia compartilhada, a codificação inteira de precisão fixa do TopoJSON pode ser substancialmente mais eficiente do que o ponto flutuante do GeoJSON.
mbostock
17
Verdadeiro. Estou errado. Eu excluiria minha resposta, mas perderíamos seu valioso comentário!
sgillies
Ha, obrigado. :) Enviei uma resposta separada que inclui considerações adicionais.
mbostock
3

Depende de muitas considerações. Entre eles estão os seguintes:

1) A natureza (modelo de dados) do recurso ou recursos que você gostaria de representar 2) Quaisquer atributos que você gostaria de ter associado a esses recursos 3) Como você gostaria que esses recursos se comportassem na página (estático vs. dinâmico)

No entanto, essa é uma pergunta difícil de responder em abstrato. Com relação a alguns detalhes, se você tiver uma cobertura de polígono contígua ou outra situação onde os recursos estão compartilhando limites, o modelo de topojson permite explorar a redundância e fatorá-la no modelo.

Leia a documentação, analise exemplos (por exemplo, bl.ocks.org) e, em seguida, obtenha alguns dados e represente-os em geojson e topojson e crie suas próprias visualizações.

wsvekla
fonte
Obrigado wsvekla. Eu tenho feito isso - encontrei suas essências em bl.ocks.org, na verdade ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ), mas não é fácil de pesquisar no Google. No entanto, como você apontou, há muitas considerações e estou tentando explorar comparações lado a lado para aprender isso.
Lucas
2
Esses dois blocos fazem referência ao mesmo shapefile original: bl.ocks.org/4485308 e bl.ocks.org/4348435 . TopoJSON realmente começou a afundar quando eu finalmente entendi como poderia representar vários recursos (limites nacionais, departamentais e municipais) com os mesmos dados no mesmo arquivo (você não pode fazer isso com geojson). Isso é realizado por meio da função de filtro: function (a, b) {return a.id! == b.id;}). Tente entender isso e o topojson começará a fazer sentido. Para obter uma melhor referência de código e minimalismo puro
wsvekla