Questa è una risposta a @ di JoanManuelHernández risposta, ma non riesco a postare formattato il codice in un commento.
Joan, la tua soluzione è eccellente; è molto simile a come lo farei io stesso. La creazione di una matrice di posizioni dei marcatori è decisamente migliore rispetto all'utilizzo di singole variabili per ciascuna di esse.
Mi piacerebbe suggerire un paio di piccoli miglioramenti. Uno è dove si dispone della matrice denominata json
. Questo non è un nome molto descrittivo; json
potrebbe significare qualsiasi tipo di dati. Che ne dici di chiamarlo qualcosa come places
o locations
o simili?
Successivamente, dove si ha il ciclo che crea la chiusura per gestire il callback asincrono, penso che sia un po 'più facile capire come funziona se si sposta l'intero corpo del loop nella sua funzione. Quindi non hai bisogno della funzione anonima in linea. Quindi, questo codice:
// Looping through the JSON data
for (var i = 0, length = json.length; i < length; i++) {
var data = json[i],
latLng = new google.maps.LatLng(data.lat, data.lng);
// Creating a marker and putting it on the map
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: data.title
});
// Creating a closure to retain the correct data, notice how I pass the current data in the loop into the closure (marker, data)
(function(marker, data) {
// Attaching a click event to the current marker
google.maps.event.addListener(marker, "click", function(e) {
infoWindow.setContent(data.description);
infoWindow.open(map, marker);
});
})(marker, data);
}
sarebbe diventato:
// Looping through the places list
for(var i = 0, length = places.length; i < length; i++) {
addPlace(places[i]);
}
// Add one place marker
function addPlace(place) {
var latLng = new google.maps.LatLng(place.lat, place.lng);
// Creating a marker and putting it on the map
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: place.title
});
// Attaching a click event to the current marker
google.maps.event.addListener(marker, "click", function(e) {
infoWindow.setContent(place.description);
infoWindow.open(map, marker);
});
}
Si fa la stessa cosa, solo un po 'più semplice in questo modo.
Un altro pensiero: La roba mappa in stile è molto cool — Sono un grande fan di mappe con stile me stesso — ma mi chiedo se deve essere lasciato fuori qui per ragioni di semplicità, in quanto non è legato alla la domanda dell'OP?
Sentiti libero di incorporare qualsiasi di queste idee nella tua risposta, se ti piacciono, e se qualcun altro trova utile questa variazione, si prega di revocare la risposta di Joan poiché è da lì che proviene il codice originale.
Soluzione eccellente che utilizza una serie di posizioni anziché singole variabili per ogni luogo! Ho un paio di suggerimenti se vuoi dare un'occhiata. Li ho postati come una "risposta" dato che non riesco a inserire il codice formattato in un commento, quindi dai un'occhiata qui sotto ... –