Queremos exibir vários marcadores em um mapa estático e queremos calcular o nível de zoom ideal, como o Google Maps faz. Já calculamos o retângulo delimitador e o ponto central do mapa, mas agora é difícil calcular o nível de zoom correto para exibir todo o retângulo delimitador. Alguém pode nos indicar a direção certa?
google-maps
openstreetmap
tiles
extents
Tobias Schwarz
fonte
fonte
Respostas:
Para obter o nível de zoom, você precisará conhecer as dimensões de pixel do seu mapa. Você também precisará fazer suas contas em coordenadas esféricas de mercator.
fonte
Este é o código C # que eu uso no Maperitive :
mapArea
: caixa delimitadora em cordas longas / lat (x = long, y = lat)paddingFactor
: isso pode ser usado para obter o efeito "120%" a que ThomM se refere. O valor de 1,2 chegaria a 120%.Note que no meu caso
zoom
pode ser um número real. No caso de mapas da Web, você precisa de um valor inteiro de zoom, portanto, use algo como(int)Math.Floor(zoom)
para obtê-lo.Obviamente, esse código se aplica apenas à projeção do Web Mercator.
fonte
GeometryUtils
é usado aqui apenas para converter graus em radianos e vice-versa, é uma fórmula matemática simples.Bounds2
é basicamente apenas uma estrutura retangular. Esse código foi fornecido mais como um pseudocódigo do que como algo diretamente passível de cópia.Se você estiver usando o OpenLayers,
Map.getZoomForExtent
calculará o nível de zoom mais alto que pode caber em toda a extensão do mapa. Oextent
precisa estar na projeção do mapa. Você também pode usar afill_factor
para evitar a exibição de pontos na borda do mapa emax_zoom
para limitar o possível zoom:fonte