0

住所を LatLng 座標にジオコーディングしようとしましたが、そうするのが非常に困難です。私geocode()は非同期関数であることを知っており、役に立たないコールバックをいじっています。このような他の投稿 (非同期コールバック関数から値を返す方法は? )を見てきましたが、概念を理解するのに苦労しています。誰かがそのコールバック関数を適切に実行する方法を教えてくれれば、大歓迎です。これには多くの頭痛の種があります。alert()正しい LatLng を提供するコールバックを取得できましたが、位置パラメータを設定できませんでした。申し訳ありませんが、前述の例からはわかりませんでした。言語にかなり新しい。概念を理解するために私に指摘できる参考文献も大歓迎です。ありがとう!

  var location;
  var image;
  var map;
  var geocoder;
  var address;

  function initialize() {
    var mapOptions = {
      center: new google.maps.LatLng(42.763146, -73.3776),
      zoom: 6,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
    var cloudLayer = new google.maps.weather.CloudLayer();
    cloudLayer.setMap(map);

    addressSet(function(address) {
        console.log(address);
        // tried to set location = address;, location = new google.maps.LatLng(address);
        // neither works
    });

    addMtsToMap(location,
                map,
                new google.maps.MarkerImage("img/mts/skier.png", null, null, null, new google.maps.Size(50,50)));

  }

  function addMtsToMap(location, map, image) {

    var marker = new google.maps.Marker({
        position: location,
        map: map,
        icon: image
    });

    var infoWindow = new google.maps.InfoWindow({content: "<h1>Powder!!!</h1>"});

    google.maps.event.addListener(marker, "click", function() {
        infoWindow.open(map, marker);
    });
  }

  function addressSet(callback) {

    geocoder = new google.maps.Geocoder();

    geocoder.geocode({address: "Killington+VT"}, function(results, status) {

        if (status == google.maps.GeocoderStatus.OK) {

            address = results[0].geometry.location;
            callback(address);
        }
    });
  }
4

1 に答える 1

0

申し訳ありません。これを長い間いじった後、私が見つけたものは信じられませんでした. var map初期化で再度宣言したため、addressSet()関数が誤ったグローバル マップ変数を取得しました。varを削除すると機能しました。

于 2013-02-13T18:48:12.567 に答える