1

Bing Maps Ajax v7 API を使用して、こちらの例からユーザーの位置を取得します

コールバックが実行されるまで、ユーザーの位置の経度、緯度を取得するまで、またはユーザーが位置の取得を許可しない場合はエラーになるまで待つことはできますか?

    function test() {
          //Call GetMap() to get position
          GetMap();
          //Wait until callback is finished
         //Do something with user's location (result of the callback)

     }

     function GetMap()
     {

        // Set the map options
        var mapOptions = {credentials:"Bing Maps Key"};


        // Initialize the map
        var map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), mapOptions);

        // Initialize the location provider
        var geoLocationProvider = new Microsoft.Maps.GeoLocationProvider(map);

        // Get the user's current location
        geoLocationProvider.getCurrentPosition({successCallback:displayCenter});

        //Execute some more code with user's location
     }

     function displayCenter(args)
     {
        // Display the user location when the geo location request returns
        alert("The user's location is " + args.center);
     }
4

1 に答える 1

2

JavaScriptでは、ここに記載されているように、実行を明示的に中断してコールバックが終了するのを待つことはできないと思います。jQuery:関数が完了するのを待って処理を続行しますか? get positionコールバックの結果に依存するロジックがある場合は、コールバックの一部としてそのロジックを呼び出してみませんか?明示的に待つ必要はありません。あなたが達成したいことに関して、あなたが探しているのはこのようなものですか?

var map;
function test() {
      //Call GetMap() to get position
      GetMap();
      //Wait until callback is finished
     //Do something with user's location (result of the callback)

 }

 function GetMap()
 {

    // Set the map options
    var mapOptions = {credentials:"Bing Maps Key"};


    // Initialize the map
    map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), mapOptions);

    // Initialize the location provider
    var geoLocationProvider = new Microsoft.Maps.GeoLocationProvider(map);

    // Get the user's current location
    geoLocationProvider.getCurrentPosition({successCallback:displayCenter},{errorCallback:onError});
 }

function onPositionReady(position) {
    // Execute some more code with user's location
    // For Example...
    // Apply the position to the map
    var location = new Microsoft.Maps.Location(position.coords.latitude,
        position.coords.longitude);
    map.setView({ zoom: 18, center: location });

    // Add a pushpin to the map representing the current location
    var pin = new Microsoft.Maps.Pushpin(location);
    map.entities.push(pin);
}

function onError(err) {
    switch (err.code) {
        case 0:
            alert("Unknown error");
            break;
        case 1:
            alert("The user said no!");
            break;
        case 2:
            alert("Location data unavailable");
            break;
        case 3:
            alert("Location request timed out");
            break;
    }
}

更新:コールバックに引数を渡したい場合は、関数バインディングを使用しthisてコールバック内のキーワードをオーバーライドし、その方法で引数を渡すことができます。

たとえば、myObject引数を含めるように設定されている場合は、次のように渡すことができます。

 geoLocationProvider.getCurrentPosition({ successCallback: onPositionReady.bind(myObject) }, { errorCallback: onError });

this次に、キーワードを使用してコールバックでmyObjectにアクセスします。

function onPositionReady(position) {
    var myProperty = this.yourProperty;  // this now refers to myObject
    // Execute some more code with user's location
    // For Example...
    // Apply the position to the map
    var location = new Microsoft.Maps.Location(position.coords.latitude,
        position.coords.longitude);
    map.setView({ zoom: 18, center: location });

    // Add a pushpin to the map representing the current location
    var pin = new Microsoft.Maps.Pushpin(location);
    map.entities.push(pin);
}
于 2012-04-22T16:59:08.323 に答える