Wie finde ich (schnell - 15-20ms) LatLong für eine Adresse mit Javascript?

stimmen
2

Ich habe eine socket.io die alle 15-20ms eine neue Adresse Pings. Für diese Adresse, muss ich die Lat-Long und den Marker in Google Maps erhalten. Also in diesen 15-20ms (wenn nicht, kann innerhalb 50-60ms) Ich muss die GeoLocation bekommen. Ich bin derzeit geocoder = new google.maps.Geocoder();und danngeocoder.geocode({address: data}, myFunction(){});

Aber diese API für Karten ist sehr langsam. Es gibt GeoLocation in 400-500ms, die meine Zwischen Adresse macht fordert null. Ich brauche eine API, die sehr schnell ist.

Als Referenz unten ist der Code-Snippet für 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
};
Veröffentlicht am 25/02/2013 um 13:29
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Wie in den Kommentaren erwähnt, kann man eigentlich nicht erwarten, eine Antwort innerhalb von 20 ms im Internet, es funktioniert einfach nicht auf diese Weise funktionieren. Was Sie jedoch tun, ist eine Art Pool mit den Adressen zu machen und lassen Sie den Geocoder (oder vielleicht 3 von 4) arbeiten daran auf seiner eigenen Tempo.

Dies würde sich wahrscheinlich etwas wie folgt aus (nur eine Richtung zu geben hier nicht erwarten, dass es sofort arbeiten):

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();
Beantwortet am 25/02/2013 um 22:44
quelle vom benutzer

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