Pergunta

Estou usando o OpenLayers para exibir mapas OpenStreetMap. (No entanto, eu suponho que isso deve ser geral o suficiente para funcionar para qualquer produto de mapa ...)

Estou exibindo algumas sobreposições de vetores muito sofisticadas, e a quantidade e a resolução dos recursos que estou retornando do servidor via Geojson para a sobreposição provou muito para muitos computadores.

O que eu gostaria de fazer agora é enviar apenas dados adequados à resolução do zoom atual. Isso deve ser relativamente fácil de fazer usando o getResolution e calculateBounds Métodos no Map objeto. calculateBounds Retorna um objeto de limites que pode ser transformado entre a projeção do mapa e a projeção de exibição.

Como transformo a resolução em minha projeção desejada (4326 neste caso)? Existe uma maneira incorporada de fazer isso ou tenho que executar a resolução contra uma fórmula conhecida?

Foi útil?

Solução

Você pode usar Proj4js Para transformar sistemas de coordenadas no cliente.

Outras dicas

Que tal limitar a escala em que sua camada vetorial geojson desenhará?

http://dev.openlayers.org/docs/files/openlayers/layer-js.html#openlayers.layer.maxscale

Em seguida, as solicitações de Ajax do OpenLayers ao servidor devem acionar apenas essa escala. Escolha um nível de escala / zoom OpenSteetMaps que corresponda a quando deseja mostrar a camada vetorial e defina o MaxScale de acordo.

As solicitações devem estar enviando automaticamente os limites da exibição do mapa atual ao seu servidor para obter os recursos relevantes.

Eu posso ter entendido mal o seu dilema. Se você deseja as fórmulas de resolução, este artigo as descreve:

http://msdn.microsoft.com/en-us/library/aa940990.aspx

Atualizar

Você pode implementar uma estratégia de agrupamento em OpenLayers. Eu acho que isso deve reduzir o tempo de renderização, embora eu presumir que a mesma quantidade de dados seria retornada do banco de dados.

http://dev.openlayers.org/releases/openlayers-2.7/doc/apidocs/files/openlayers/strategy/cluster-js.html

Confira o exemplo aqui:

http://openlayers.org/dev/examples/strategy-cluster.html

Para evitar ter pontos de tamanho diferente, você deve definir o pointradius: "$ {raio}" como uma constante.

Finalmente, uma alternativa seria usar um serviço WMS em vez de Geojson, o servidor só retornaria imagens de um tamanho fixo.

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