¿Cómo encuentro (rápidamente - 15-20ms) LatLong una dirección mediante Javascript?

votos
2

Tengo un socket.io la que hace ping a una nueva dirección de cada 15-20ms. Por esta Dirección, tengo que conseguir el lat-Long y colocar el marcador en Google Maps. Así que dentro de esos 15-20ms (si no, puede estar dentro 50-60ms) Tengo que conseguir la geolocalización. Actualmente estoy usando geocoder = new google.maps.Geocoder();y luegogeocoder.geocode({address: data}, myFunction(){});

Pero esta API de Mapas es muy lento. Devuelve de geolocalización en 400-500ms que hace mi intermedio Dirección solicita nula. Necesito una API que es muy rápido.

Como referencia, a continuación es el fragmento de código para 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
};
Publicado el 25/02/2013 a las 13:29
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Como se mencionó en los comentarios realidad no se puede esperar una respuesta dentro de 20 ms en el Internet, simplemente no funciona de esa manera. Lo que sin embargo se puede hacer es hacer una especie de piscina con las direcciones y dejar que el geocodificador (o tal vez 3 de 4) trabajar en él en su propio ritmo.

Esto probablemente se vería algo como esto (sólo dar una dirección aquí, no esperar que funcione de inmediato):

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();
Respondida el 25/02/2013 a las 22:44
fuente por usuario

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