Cum pot găsi (rapid - 15-20ms) LatLong unei adrese folosind Javascript?

voturi
2

Am o socket.io care un nou ping Adresa la fiecare 15-20ms. Pentru această adresă, trebuie să obțineți Lat Long și plasați marcatorul în Hărți Google. Deci , în cadrul acestor 15-20ms (dacă nu, poate fi în termen de 50-60ms) Trebuie să iau Geolocation. În prezent , I sînt folosire geocoder = new google.maps.Geocoder();și apoigeocoder.geocode({address: data}, myFunction(){});

Dar acest API pentru Maps este foarte lent. Se întoarce geolocalizarea 400-500ms care face intermediarul meu Adresa cere null. Am nevoie de un API, care este foarte rapid.

Pentru referință, mai jos este fragmentul de cod pentru 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
};
Întrebat 25/02/2013 la 13:29
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

După cum sa menționat în comentariile nu vă puteți aștepta de fapt, un răspuns în termen de 20ms pe internet, pur și simplu nu funcționează în acest fel. Ce poți să faci cu toate acestea este de a face un fel de piscină cu adresele și lăsați geocoder (sau, poate, 3 din 4) de lucru pe ea pe ea propriul ritm.

Acest lucru ar arata, probabil, oarecum ca acest lucru (doar dând o direcție aici, nu se așteaptă ca aceasta să funcționeze imediat):

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();
Publicat 25/02/2013 la 22:44
sursa de către utilizator

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