Eu tenho um grande conjunto de pontos de dados que representam essencialmente a costa do mundo. Não sei a resolução exata, mas diria que é de 5 a 10m.
Imagine um conjunto de pontos que representam um litoral irregular. Em uma resolução de 1 metro, vemos todos os detalhes e precisamos de 50 pontos de dados para representar corretamente a costa, no entanto, com 10 km de resolução, a costa se parece com uma linha reta e precisaríamos apenas de 2 pontos.
Estou escrevendo um aplicativo de mapeamento que exigirá que os dados sejam dimensionados de resoluções "de todo o planeta" para resoluções "de rua". Preciso de ajuda para reduzir a resolução dos meus pontos de dados e, posteriormente, a quantidade de dados para resoluções maiores.
Eu tenho lido sobre Vector-Tiling e acho que essa será a melhor solução (já estou fazendo algo assim). No entanto, em baixas resoluções, meu conjunto de dados ainda é enorme, o que significa que a renderização demora um pouco [relativamente] tempo, onde as altas resoluções são rápidas porque o conjunto de dados 'efetivo' é pequeno (subconjunto do todo).
Estou tentando determinar como pegar meu grande conjunto de dados e reduzir a escala dele para que os dados do bloco da visualização do meu 'planeta inteiro' tenham um tamanho gerenciável. Como crio os subconjuntos de dados do bloco a partir do conjunto de dados completo maior?
Fico feliz em usar uma ferramenta, mas prefiro fazê-lo em um esforço para aprender como é feito.
Respostas:
Como você resolverá esse problema realmente depende do caso e da importância da topologia real para você (versus apenas o tempo visual / de renderização). Como seu objetivo final é generalizar linhas costeiras, algumas idéias sobre generalização podem ser úteis.
Uma abordagem usa buffer, como visto aqui . Eu também tive um problema semelhante há um tempo e detalhei minha solução aqui .
Em resumo, você pode fazer uso de conjuntos de dados vetoriais separados (ou pelo menos geometrias separadas), generalizados em diferentes níveis. Isso soluciona seu problema básico, embora não faça uso de blocos, mas é claro que você ainda pode usá-los, se quiser. Obviamente, se você deseja dividir seu conjunto de dados em blocos com base em uma grade, generalize primeiro, ou você terá lacunas entre os blocos.
fonte
Você deve preparar diferentes versões generalizadas do seu conjunto de dados para os níveis de zoom de "planeta inteiro" até o zoom aproximado.
Um algoritmo de generalização clássico é o algoritmo de Douglas-Peucker . Você precisará conectar os pontos às linhas costeiras primeiro, se ainda não o fez.
fonte
Você investigou a Tilemill para produzir seus conjuntos de peças? Ele automagicamente reduz os nós em diferentes níveis de zoom. https://github.com/mapbox/tilemill
fonte
Provavelmente não está respondendo à sua pergunta, mas está bastante relacionada - é assim que o Google codifica polilinhas, incluindo as informações de generalização: http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html
fonte