Как заставить маленького парня в гугл-карте привязаться к ближайшей точке, если его выбросили? - PullRequest
2 голосов
/ 17 декабря 2010

В этом примере карты Google: http://code.google.com/apis/maps/documentation/javascript/examples/streetview-simple.html
Если пользователь, например, бросил маленького парня далеко в середине океана, он исчезнет.
Но на главном веб-сайте карты Google http://maps.google.com/ Если вы сделали так, чтобы показывалось представление улиц, и пользователь утащил парня, он автоматически вернулся к предыдущей точке.

Что пропущено в первом примере, чтобы заставить его вести себя так же, как карта Googleсайт?

вот пример кода:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example: Street View Layer</title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css" />
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
<script type="text/javascript">

  function initialize() {
    var fenway = new google.maps.LatLng(42.345573,-71.098326);
    var mapOptions = {
      center: fenway,
      zoom: 14,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(
        document.getElementById("map_canvas"), mapOptions);
    var panoramaOptions = {
      position: fenway,
      pov: {
        heading: 34,
        pitch: 10,
        zoom: 1
      }
    };
    var panorama = new  google.maps.StreetViewPanorama(document.getElementById("pano"),panoramaOptions);
    map.setStreetView(panorama);
  }
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width: 400px; height: 300px"></div>
  <div id="pano" style="position:absolute; left:410px; top: 8px; width: 400px; height: 300px;"></div>
</body>
</html>

1 Ответ

1 голос
/ 20 декабря 2010

Для этого добавьте прослушиватель событий в position_changed и используйте его для хранения последнего (действительного) местоположения, в которое был сброшен pegman.

google.maps.event.addListener(panorama, 'position_changed', function() {
  // Store position
});

А затем добавьте прослушиватель событий в visibility_changed (который срабатывает при падении пегмана в океане), чтобы вернуть его к последнему известному местоположению:

google.maps.event.addListener(panorama, 'visible_changed', function() {
  if (panorama.getVisible() == false && last_location) {
    panorama.setPosition(last_location);
  }
});
...