Как найти (быстро - 15-20ms) LatLong для адреса с помощью JavaScript?

голоса
2

У меня есть Socket.io , который пингует новый адрес каждые 15-20ms. Для этого адреса, я должен получить Lat-Long и поместить маркер в Google Maps. Таким образом , в этих 15-20ms (если нет, то может быть в пределах 50-60ms) я должен получить геолокации. В настоящее время я использую , geocoder = new google.maps.Geocoder();а затемgeocoder.geocode({address: data}, myFunction(){});

Но это API для карт очень медленно. Она возвращает GeoLocation в 400-500ms, который делает мой промежуточный адрес запрашивает нуль. Мне нужен API, который очень быстро.

Для справки, ниже приведен фрагмент кода для 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
};
Задан 25/02/2013 в 13:29
источник пользователем
На других языках...                            


1 ответов

голоса
0

Как уже упоминалось в комментариях вы не можете реально ожидать ответа в течение 20мс в Интернете, он просто не работает. Что вы можете сделать, однако это делает своего рода бассейн с адресами и пусть геокодеру (или, может быть, 3 из 4) работать над ним на его собственном темпе.

Это вероятно, будет выглядеть примерно так (как раз дает направление здесь, не следует ожидать, что работать сразу):

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();
Ответил 25/02/2013 в 22:44
источник пользователем

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