OpenLayers: Obtenha resolução do mapa em uma determinada projeção (4326)
-
18-09-2019 - |
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?
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.
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.