Comment puis-je trouver (rapidement - 15-20ms) LatLong pour une adresse en utilisant Javascript?

voix
2

J'ai un socket.io qui cingle une nouvelle adresse tous les 15-20ms. Pour cette adresse, je dois obtenir le Lat-Long et placer le marqueur dans Google Maps. Donc , dans ces 15-20ms (sinon, peut être dans 50-60ms) Je dois obtenir le GeoLocation. Actuellement , je suis en utilisant geocoder = new google.maps.Geocoder();etgeocoder.geocode({address: data}, myFunction(){});

Mais cette API pour Maps est très lent. Il retourne dans GeoLocation 400-500ms qui rend mon adresse intermédiaire demande nulle. J'ai besoin d'une API qui est très rapide.

Pour référence, ci-dessous l'extrait de code pour socket.io:

geocoder = new google.maps.Geocoder();
    var socket = io.connect('http://localhost');
    socket.on('new_address', function (data) {
        //Gets called everytime a new request for GeoLocation comes
        geocoder.geocode({address: data}, placeMarker);
    });

var placeMarker = function(){
    //Add Marker to GoogleMaps
};
Créé 25/02/2013 à 13:29
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Comme mentionné dans les commentaires que vous ne pouvez pas attendre en fait une réponse dans les 20ms sur Internet, il ne fonctionne pas de cette façon. Qu'est-ce que vous pouvez faire cependant faire est une sorte de piscine avec les adresses et laissez-le géocodage (ou peut-être 3 de 4) travailler sur son propre rythme.

Cela ressemblerait probablement un peu comme celui-ci (juste donner une direction ici, ne vous attendez pas à travailler tout de suite):

var addresses = [];
var socket = io.connect('http://localhost');
socket.on('new_address', function (data) {
    //Gets called everytime a new request for GeoLocation comes
    //Adds an address to the list when it comes in from the backend
    adresses.push(data);
});

var geocoder = new google.maps.Geocoder();
//This function is called in a loop.
var addressCheck = function() {
    //When the list of addresses is empty, because we haven't received anything from the backend, just wait for a bit and call this function again.
    if(addresses.length == 0) {
        setTimeout(addressCheck, 400);
        return;
    }
    //Get the first one on the list.
    var data = addresses[0];
    //Process it.
    geocoder.geocode({address: data}, function() {
        placeMarker();
            //remove the first element from the adresses list.
        addresses.shift();
            //Call the entire function again, so it starts with a new address.
        addressCheck();
    });
}
var placeMarker = function(){
    //Add Marker to GoogleMaps
};

addressCheck();
Créé 25/02/2013 à 22:44
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more