Πώς μπορώ να βρω (γρήγορα - 15-20ms) LatLong για μια διεύθυνση χρησιμοποιώντας Javascript;

ψήφοι
2

Έχω ένα socket.io που pings μια νέα διεύθυνση κάθε 15-20ms. Γι 'αυτό Διεύθυνση, πρέπει να πάρω το Lat-Long και τοποθετήστε το δείκτη στους Χάρτες Google. Έτσι, στο πλαίσιο αυτών των 15-20ms (αν όχι, μπορεί να είναι μέσα 50-60ms) πρέπει να πάρει το geolocation. Αυτή τη στιγμή είμαι με τη χρήση 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

Όπως αναφέρθηκε στα σχόλια που δεν μπορεί πραγματικά να περιμένουμε μια απάντηση μέσα σε 20ms στο διαδίκτυο, απλά δεν λειτουργεί με αυτόν τον τρόπο. Τι μπορείτε να κάνετε όμως είναι κάνοντας ένα είδος πισίνα με τις διευθύνσεις και αφήστε το geocoder (ή ίσως 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