Pergunta

SpatialKey gera algumas muito legal à procura heatmaps, e nós estamos olhando para o que está envolvido em fazer isso para um projeto interno para visualizar grandes quantidades de pontos. Estou à procura de feedback sobre algumas idéias sobre onde começar (e é apenas um problema realmente interessante).

SpatialKey heatmap http://img697.imageshack.us/img697/7964/resolutiondays508x17550. jpg

Sabemos que eles estão usando o Flash, e pelo que podemos dizer, os mapas de calor são interativos ao invés de ser processado a partir de um servidor de telha. Nosso primeiro palpite em como isso é implementado é que o servidor fornece o cliente Flash com uma grade - cada célula tendo uma contagem calculado pelo servidor. O cliente Flash seguida, faz algumas interpolação com base nos valores das células na grade para fazer a saída muito que você vê acima.

Nesta fase, só estou interessado em saber como eles poderiam gerar a grade eficiente do lado do servidor (se a nossa hipótese sobre a sua implementação é ainda correto). Parece que isso implicaria:

  1. Executar uma consulta para o que está atualmente no mapa limites
  2. Realizando uma subconsulta agregação para cada célula dentro desses limites (fazendo uma contagem, soma, média ou como no exemplo acima).

Lance fazer isso em vários níveis de zoom em uma resolução de grade sã e parece que você precisa de um índice espacial personalizado para fazer essa eficiente.

Qualquer comprador em explicar uma rota alternativa? Se é importante, nós estamos acostumados aqui para armazenar nossos dados em PostgreSQL com PostGIS para o índice espacial, mas estou aberto a tentar qualquer coisa.

Foi útil?

Solução

Como apenas um palpite, eu imagino que eles têm implementado uma biblioteca GIS in Flash no lado do cliente e estão usando isso para latitude projeto e longitude em um espaço pixel. Em seguida, eles agregar a pixel para determinar a "altura" de cada pixel e torná-lo apenas como você tornaria um círculo, mas usando um preenchimento de gradiente com uma transparência, com as cores inicial e final do preenchimento de gradiente determinada pela altura do pixel. Vários círculos sobrepostos em cima uns dos outros criará pixels mais brilhantes.

Uma alternativa poderia ser a de fazer isso em uma escala de cinzentos, em seguida, mapear o valor de brilho a uma escala de cores. Isso pode ser mais eficiente.

Nós vendemos os mapas mais tradicionais de calor treemap para uso integração em aplicações de análise visual (por exemplo: o calor mapa SDK), e agora tem calor mapas geográficos que as áreas colorize. Nós ler mapas padrão ESRI Shapefile e fazer tudo a projeção e renderização no lado do cliente o (em Java, não Flash, mas mesmo conceito). Acho SpatialKey está fazendo o mesmo, uma vez que suportam renderização cheio de área, o que realmente não pode ser feito se você estiver usando um servidor telha como o Google Maps.

Ainda não está fazendo calor densidade mapas como este, mas tenho que correr alguns testes usando imagens estáticas como pano de fundo. Se você quiser mais informações, deixe-me saber e eu posso pedir ao meu desenvolvedor como nós o fizemos. Eu sei que estamos atualmente em desenvolvimento em mais recursos baseados em ponto, embora eu não sei onde mapas de calor densidade estão no cronograma ainda.

SpatialKey apenas realmente escreveu um bom post sobre a diferença entre mapas cheios de área de calor (ou seja: mapas temáticos) e mapas de calor densidade. Você pode verificá-la em http: // blog. spatialkey.com/2010/02/comparing-thematic-maps-with-density-heatmaps/.

Se você descobrir uma boa maneira de fazer mapas de calor densidade, eu estaria interessado em saber como você fez isso, pois seria uma adição valiosa para nossas análises visuais SDK. Melhor da sorte.

Outras dicas

MapReduce para seus totais mapa real global, e algo com Geospatial indexação do banco de dados - para alimentar estes trabalhos de MapReduce. Eu estou olhando para implementar este exato a mesma abordagem, mas para interfaces em vez de mapas :) MongoDB parece ser uma boa opção no momento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top