Pergunta

Eu tenho um problema semelhante a esta postagem. Preciso exibir até 1000 polígonos em um mapa do Google incorporado. Os polígonos estão em um banco de dados SQL, e eu posso renderizar cada um como um único arquivo KML em tempo real usando um httphandler personalizado (em asp.net), como este http://alpha.foresttransparency.org/concession.1.kml .

Mesmo na minha máquina de desenvolvimento (muito rápida), leva um tempo para carregar até algumas dezenas de formas. Então, duas perguntas, realmente:

  1. Qual seria uma boa estratégia para torná -los como marcadores em vez de sobreposições quando estiver além de um certo nível de zoom?

  2. Existe um algoritmo disponível ao público para simplificar um polígono (reduzindo o número de pontos) para que não esteja mostrando mais pontos do que fazer sentido em um certo nível de zoom?

Foi útil?

Solução

Para sua segunda pergunta: você precisa do Algoritmo de generalização de Douglas-Peucker

Outras dicas

Para sua primeira pergunta, você poderia calcular a área de um polígono específico e relacionar cada nível de zoom a uma área mínima específica; portanto, à medida que o zoom dentro ou para fora do polígono desaparece e os marcadores aparecem dependendo do nível de zoom.

Para a segunda pergunta, eu usaria a sugestão de Mark Bessey.

Não conheço muito AOBUT KML, mas acho que a solução usual para a pergunta nº 2 envolve a iteração dos pontos e excluindo qualquer segmentos de linha sob um determinado tamanho. Isso causará alguns efeitos "infelizes" em alguns casos, mas é relativamente rápido e fácil de fazer.

Eu recomendaria 2 coisas: - Calcule e combine polígonos que são tocantes. Isso envolve muito processamento e matemática difícil, mas eu fiz isso, então sei que é possível. - Crie sua própria sobreposição em vez de usar o KML no formato PNG, enquanto você os combina na sugestão anterior. Você terá que criar muitos PNGs, mas está acendendo rapidamente no cliente.

Boa sorte :)

Eu precisava de uma solução para sua pergunta nº 2 há pouco e depois de olhar para alguns dos algoritmos de simplificação de linha disponíveis, criei o meu.

O processo é simples e parece funcionar bem, embora possa ser um pouco lento se você não implementar corretamente:

P[0..n] É sua variedade de pontos, deixe T[n] ser definido como o triângulo formado por pontos P[n-1], P[n], P[n+1] Max é o número de pontos para os quais você está tentando reduzir essa linha.

  1. Calcule a área de cada triângulo possível T[1..n-1] no conjunto.
  2. Escolha o triângulo T[i] Com a menor área
  3. Remova o ponto P[i] Para achatar essencialmente o triângulo
  4. Recalcular a área dos triângulos afetados T[n-1], T[n+1]
  5. Vá para a etapa 2 se o número de pontos> Max
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top