Jak mogę znaleźć (szybko - 15-20ms) LatLong adresu przy użyciu JavaScript?

głosy
2

Mam socket.io który pingi nowy adres co 15-20ms. Na ten adres, muszę dostać Lat-Long i umieść znacznik w Mapach Google. Więc w tych 15-20ms (jeśli nie, to może być w zasięgu 50-60ms) Muszę dostać geolokalizacyjnymi. Obecnie używam geocoder = new google.maps.Geocoder();, a następniegeocoder.geocode({address: data}, myFunction(){});

Ale to dla Maps API jest bardzo powolny. Zwraca Geolokalizacja w 400-500ms co czyni mój pośredni Adres zwraca wartość null. Muszę API, który jest bardzo szybki.

Dla porównania, poniżej znajduje się fragment kodu dla 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
};
Utwórz 25/02/2013 o 13:29
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Jak wspomniano w komentarzach nie można rzeczywiście oczekiwać odpowiedzi w ciągu 20 ms w internecie, to po prostu nie działa w ten sposób. Co możesz zrobić, to jednak czyni rodzaj basenu z adresami i niech geocoder (albo 3 z 4) nad nim pracować na jego własnym tempie.

To będzie prawdopodobnie wyglądać mniej więcej tak (tylko dając kierunek tutaj, nie można oczekiwać, że do pracy od razu):

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();
Odpowiedział 25/02/2013 o 22:44
źródło użytkownik

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