Hoe vind ik (snel - 15-20ms) LatLong naar een adres met behulp van JavaScript?

stemmen
2

Ik heb een socket.io die een nieuw adres pingelt elke 15-20ms. Voor dit adres, moet ik de Lat-Long krijgen en plaats de markering in Google Maps. Dus binnen die 15-20ms (zo niet, dan kan binnen 50-60ms) Ik heb om de geolocatie te krijgen. Momenteel ben ik met behulp van geocoder = new google.maps.Geocoder();en vervolgensgeocoder.geocode({address: data}, myFunction(){});

Maar deze API voor Maps is erg traag. Het keert geolocatie in 400-500ms worden verleend, wegens mijn tussenliggende adresaanvragen null. Ik heb een API die is erg snel.

Ter referentie, dan is het codefragment voor 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
};
De vraag is gesteld op 25/02/2013 om 13:29
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Zoals vermeld in het commentaar je eigenlijk niet verwachten dat een antwoord binnen 20ms op het internet, het gewoon niet op die manier. Wat je kunt wel doen, is het maken van een soort van zwembad met de adressen en laat de geocoder (of misschien 3 of 4) te werken aan het op zijn eigen tempo.

Dit zou waarschijnlijk lijken dit enigszins als (alleen het geven van een richting hier, verwacht niet dat het direct aan het werk):

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();
antwoordde op 25/02/2013 om 22:44
bron van user

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