Hvordan finner jeg (raskt - 15-20ms) LatLong for en adresse ved hjelp av Javascript?

stemmer
2

Jeg har en socket.io som ping en ny adressebok hver 15-20ms. For denne adressen, jeg må få Lat Long og plassere markøren i Google Maps. Så i løpet av de 15-20ms (hvis ikke, kan være innenfor 50-60ms) Jeg må få Geolocation. Foreløpig Jeg bruker geocoder = new google.maps.Geocoder();og derettergeocoder.geocode({address: data}, myFunction(){});

Men dette API for Maps er veldig treg. Den returnerer Geolocation i 400-500ms som gjør min mellom Adresse ber null. Jeg trenger en API som er veldig fort.

For referanse, under er kodebiten for 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
};
Publisert på 25/02/2013 klokken 12:29
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Som nevnt i kommentarene kan du faktisk ikke forvente svar innen 20ms på internett, det bare virker ikke sånn. Hva kan du imidlertid gjøre er å lage en slags pool med adresser og la geocoder (eller kanskje 3 av 4) arbeide med det på sitt eget tempo.

Dette vil trolig se noe slik ut (bare å gi en retning her, ikke forvent at det skal fungere med en gang):

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();
Svarte 25/02/2013 kl. 21:44
kilden bruker

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