2011-09-08 3 views
0

J'ai un élément jquery autocomplete ui qui montre une liste de stations de chemin de fer. Lorsqu'un utilisateur sélectionne une station dans la liste de saisie semi-automatique, la fonction doit renvoyer un ensemble de latitude/coordonnées à partir de la base de données et recentrer la carte sur ces coordonnées.google.maps.setCenter() latitude et longitude demandées via jquery.ajax()

Quelqu'un d'endroit où je suis mauvais code dans ce code?

// make a json request to get the map data from the Map action 
$(function() {   
    $.getJSON("/Home/Map", initialise); 
}); 

var infowindow = new google.maps.InfoWindow({content: "EMPTY"}); 




function initialise(mapData) { 

var latlng = new google.maps.LatLng(54.466667, -3.233333); 

var myOptions = { 
    zoom: 5, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.TERRAIN, 
    mapTypeControlOptions: { 

     style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR 
    }, 
    scaleControl: true, 
    streetViewControl: false 

}; 


var map = new google.maps.Map($("#map")[0], 
myOptions); 


    $.each(mapData, function (i, location) { 
     setupLocationMarker(map, location); 
    }); 

//Autocomplete 
$(function() { 
     $("#tags").autocomplete({ 
      source: "/Home/StationsList", 
      minLength: 2, 
      select: function (event, ui) { 
       jQuery.ajax({ 
        url: "Home/GetStationLatLong/" + ui.item.value, 
        dataType: "json", 
        success: function (data) { 
         map.setCenter(new google.maps.latLng(data.latitude, data.longitude)); 
        }      
       }); 
      } 
     }); 

    }); 

} 

function setupLocationMarker(map, location) { 

var latlng = new google.maps.LatLng(location.Latitude, location.Longitude); 

var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title: location.Name 

}); 

google.maps.event.addListener(marker, 'click', function() { 
    infowindow.setContent('<h2>' + location.Name + '</h2>'); 

    infowindow.open(map, marker); 


    $("#info").text(location.Name); 
});  

} 

Le JSON renvoyé du serveur par le "Home/GetStationLatLong" demande ressemble à ce

[{"latitude":53.66314,"longitude":-1.48149}] 

Répondre

5

essayer

map.setCenter(new google.maps.LatLng(data[0].latitude, data[0].longitude)); 
+0

A bientôt, que [0] a fait marcher la réponse de jorge. Upvoted – MrBliz

+0

Maintenant vous a marqué comme la bonne réponse car je demandais setCenter en premier lieu – MrBliz

0

La fonction de réussite devrait être comme:

success: function(data) { 
    google.maps.setCenter(new google.maps.latLng(data.latitude, data.longitude)); 
} 
+0

Merci, mais cela ne résout pas le problème. – MrBliz

2

Peut-être que vous cherchez ce

success: function (data){ 
    //map.setCenter(new google.maps.latLng(coordinates[0].latitude, data.longitude)); 
    var coordinates = $.parseJON(data); 
    map.panTo(new google.maps.LatLng(coordinates[0].latitude, coordinates[0].longitude)); 
} 
+0

Oui c'est vrai que j'étais. N'a pas fonctionné au début, mais en ajoutant des données [0] .latitude, data [0] .longitude selon bsrykt dit ci-dessous fait fonctionner correctement – MrBliz

+0

En fait, je préfère setCenter pour mon cas d'utilisation, donc j'ai marqué bsrykt comme le bonne réponse, mais merci de me mettre sur le bon chemin. Upvoted. – MrBliz

+0

ne vous inquiétez pas :). C'est bon – Jorge