Isto é o que eu uso para exibir um mapa com 3 pinos / marcadores:
<script>
function initialize() {
var locations = [
['DESCRIPTION', 41.926979, 12.517385, 3],
['DESCRIPTION', 41.914873, 12.506486, 2],
['DESCRIPTION', 41.918574, 12.507201, 1]
];
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: new google.maps.LatLng(41.923, 12.513),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
}
}
function loadScript() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' + 'callback=initialize';
document.body.appendChild(script);
}
window.onload = loadScript;
</script>
<div id="map" style="width: 900px; height: 700px;"></div>
O que estou procurando é uma maneira de evitar ter que "manualmente" encontrar o centro do mapa center: new google.maps.LatLng(41.923, 12.513)
. Existe uma maneira de ter o mapa automaticamente centralizado nas três coordenadas?
javascript
google-maps
google-maps-api-3
google-maps-markers
MultiformeIngegno
fonte
fonte
Respostas:
Há uma maneira mais fácil, estendendo um vazio em
LatLngBounds
vez de criar um explicitamente a partir de dois pontos. (Veja esta pergunta para mais detalhes)Deve ser algo como isto, adicionado ao seu código:
Dessa forma, você pode usar um número arbitrário de pontos e não precisa conhecer a ordem antecipadamente.
Demonstração jsFiddle aqui: http://jsfiddle.net/x5R63/
fonte
setZoom
DEPOISfitBounds
fitBounds
funcionou para mim em um breve teste; deixe-me saber se você ainda está tendo problemas.map.panToBounds(bounds);
é para zoom automático.Eu acho que você tem que calcular min latitude e longitude min: Aqui está um exemplo com a função a ser usada para centralizar seu ponto:
fonte
Para encontrar o centro exato do mapa, você precisará converter as coordenadas lat / lon em coordenadas de pixel e, em seguida, encontrar o centro do pixel e convertê-lo novamente em coordenadas lat / lon.
Você pode não perceber ou se importar com a deriva, dependendo da distância ao norte ou ao sul do equador. Você pode ver a deriva executando map.setCenter (map.getBounds (). GetCenter ()) dentro de um setInterval, a deriva desaparecerá lentamente à medida que se aproxima do equador.
Você pode usar o seguinte para converter entre coordenadas lat / lon e pixel. As coordenadas de pixel são baseadas em um plano de todo o mundo totalmente ampliado, mas você pode encontrar o centro disso e voltar a lat / lon.
fonte
Eu uso o método acima para definir os limites do mapa e, em vez de redefinir o nível de zoom, apenas calculo a LAT média e a LON média e defino o ponto central para esse local. Eu adiciono todos os valores lat em latTotal e todos os valores lon em lontotal e depois divido pelo número de marcadores. Em seguida, defino o ponto central do mapa com esses valores médios.
latCenter = latTotal / markercount; lonCenter = número total / contagem de marcas;
fonte
Eu tive uma situação em que não consigo alterar o código antigo, então adicionei esta função javascript para calcular o ponto central e o nível de zoom:
fonte
Aqui está minha opinião sobre o caso de alguém encontrar esse tópico:
Isso ajuda a proteger contra dados não numéricos, destruindo qualquer uma das suas variáveis finais que determinam
lat
elng
.Ele funciona capturando todas as suas coordenadas, analisando-as em elementos separados
lat
elng
de uma matriz e determinando a média de cada uma. Essa média deve ser o centro (e provou ser verdade nos meus casos de teste).fonte