2

15 ~ 20 ミリ秒ごとに新しいアドレスを ping する socket.io があります。この住所については、緯度経度を取得してマーカーを Google マップに配置する必要があります。したがって、これらの 15 ~ 20 ミリ秒以内 (そうでない場合は 50 ~ 60 ミリ秒以内) に GeoLocation を取得する必要があります。現在、私は使用していgeocoder = new google.maps.Geocoder();ますgeocoder.geocode({address: data}, myFunction(){});

しかし、このマップ用 API は非常に遅いです。400 ~ 500 ミリ秒で GeoLocation が返され、中間の Address リクエストが null になります。非常に高速な 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
};
4

1 に答える 1

0

コメントで述べたように、実際にはインターネット上で 20 ミリ秒以内に応答を期待することはできません。そのようには機能しません。ただし、できることは、アドレスを使用して一種のプールを作成し、ジオコーダー (または 4 つのうちの 3 つ) に自分のペースで作業させることです。

これはおそらく次のようになります (ここで指示を与えるだけで、すぐに機能するとは思わないでください)。

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();
于 2013-02-25T21:44:08.887 に答える