0

助けてください。シカゴの地図を作成しようとしており、現在の既知の場所がその地図上にマーカーとして表示されます。問題は(チュートリアルやドキュメントでこれについて明示的に言及されていませんが)、marker同じスコープでvarを宣言する必要があるようです(おそらく直後ですか?)マップを宣言します---グローバル変数はドン'うまくいかないようです。私は非同期呼び出しを行っているため、これは困難です。したがって、position定義したコールバック関数でマーカーを検証するだけです。したがって、次のコードは機能しません...

(function() {

  var chicago = new google.maps.LatLng(41.87811, -87.62980);
  var info = document.getElementById("info");
  var map;

  function showError(error) 
  {
    info.innerHTML += "Error: " + error.message;
  }

  function getLocation(position) 
  { 
    current_location = new google.maps.LatLng(
      position.coords.latitude, position.coords.longitude);

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

  window.onload = function() {

    var mapOptions = {
      zoom: 10,
      center: chicago,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

    if (navigator.geolocation) 
    {
      navigator.geolocation.getCurrentPosition(getLocation, showError);
    }
  } 

})();

これから抜け出すきれいな方法はわかりませんが、そうでないことを示したいと思います。

4

1 に答える 1

1

私があなたを正しく理解していれば、これは機能するはずですが、これが自分のアプリで見つかった位置でのマーカーの非同期作成を処理する方法であり、うまく機能します! これが意図したものでない場合は、お知らせください。

function initialize() {
    var mapOptions = {
        zoom: 10,
        center: new google.maps.LatLng(lat, lon),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        zoomControl: true,
        zoomControlOptions: {
            style: google.maps.ZoomControlStyle.LARGE
        }
    };
    map = new google.maps.Map(document.getElementById('gmaps'), mapOptions);
    locateMe();


}


function locateMe() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
            initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
            map.setCenter(initialLocation);
            map.setZoom(15);
            setMarkerPosition(position.coords.latitude, position.coords.longitude);

            updateLocation();
        }, function() {
            handleNoGeolocation(browserSupportFlag);
        });
    } else {
    }
}


function setMarkerPosition(lati, longi) {
    var latLongMarker = new google.maps.LatLng(lati,longi);
    marker = new google.maps.Marker({
        position: latLongMarker,
        map: map,
        draggable: false,
        title: "Your Location"
    });
}
于 2013-06-02T07:58:29.357 に答える