Esto es lo que uso para mostrar un mapa con 3 pines / 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>
Lo que estoy buscando es una forma de evitar tener que buscar "manualmente" el centro del mapa con center: new google.maps.LatLng(41.923, 12.513)
. ¿Hay alguna manera de tener el mapa centrado automáticamente en las tres coordenadas?
javascript
google-maps
google-maps-api-3
google-maps-markers
MultiformeIngegno
fuente
fuente
Respuestas:
Hay una manera más fácil, extendiendo un vacío en
LatLngBounds
lugar de crear uno explícitamente desde dos puntos. (Vea esta pregunta para más detalles)Debería verse así, agregado a su código:
De esta manera, puede usar un número arbitrario de puntos, y no necesita conocer el orden de antemano.
Demostración jsFiddle aquí: http://jsfiddle.net/x5R63/
fuente
setZoom
DESPUÉSfitBounds
fitBounds
trabajar para mí en una breve prueba; Avísame si todavía tienes problemas.map.panToBounds(bounds);
es para auto zoom.Creo que tienes que calcular latitudine min y longitude min: Aquí hay un ejemplo con la función que usarás para centrar tu punto:
fuente
Para encontrar el centro exacto del mapa, deberá traducir las coordenadas de lat / lon en coordenadas de píxel y luego buscar el centro de píxeles y convertirlo nuevamente en coordenadas de lat / lon.
Es posible que no note o le importe la deriva dependiendo de qué tan al norte o al sur del ecuador se encuentre. Puede ver la deriva haciendo map.setCenter (map.getBounds (). GetCenter ()) dentro de un setInterval, la deriva desaparecerá lentamente a medida que se acerca al ecuador.
Puede usar lo siguiente para traducir entre coordenadas lat / lon y píxeles. Las coordenadas de los píxeles se basan en un plano de todo el mundo totalmente ampliado, pero luego puede encontrar el centro de eso y volver a cambiarlo a lat / lon.
fuente
Utilizo el método anterior para establecer los límites del mapa, luego, en lugar de restablecer el nivel de zoom, solo calculo el LAT promedio y el LON promedio y establezco el punto central en esa ubicación. Agrego todos los valores de lat en latTotal y todos los valores de lon en lontotal y luego divido por el número de marcadores. Luego establezco el punto central del mapa en esos valores promedio.
latCenter = latTotal / markercount; lonCenter = lontotal / markercount;
fuente
Tuve una situación en la que no puedo cambiar el código anterior, así que agregué esta función de JavaScript para calcular el punto central y el nivel de zoom:
fuente
Aquí está mi opinión sobre esto en caso de que alguien se encuentre con este hilo:
Esto ayuda a proteger contra datos no numéricos que destruyen cualquiera de las variables finales que determinan
lat
ylng
.Funciona tomando todas sus coordenadas, analizándolas en elementos separados
lat
ylng
de una matriz, luego determinando el promedio de cada una. Ese promedio debería ser el centro (y ha demostrado ser cierto en mis casos de prueba).fuente