Объединение Google Places API и Directions-map API v3

У меня есть следующий код на моей странице (на данный момент основанный на примерах Google. Однако я столкнулся с проблемой, я не могу заставить места работать (маркеры не отображаются), это мой код... он должен показать все кафе, рестораны и дары в пределах 10 км от местоположения пользователя с геолокацией, он также дает направление в Дарвин в Австралии от текущей позиции пользователя.

это код:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Google Maps JavaScript API v3 Example: Directions Complex</title>
    <style>

    html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}

  #map_canvas {
    height: 650px;
  }

      #directions-panel {
        height: 100%;
        float: right;
        width: 390px;
        overflow: auto;
      }

      #map-canvas {
        margin-right: 400px;
      }

      #control {
        background: #fff;
        padding: 5px;
        font-size: 14px;
        font-family: Arial;
        border: 1px solid #ccc;
        box-shadow: 0 2px 2px rgba(33, 33, 33, 0.4);
        display: none;
      }

      @media print {
        #map-canvas {
          height: 500px;
          margin: 0;
        }

        #directions-panel {
          float: none;
          width: auto;
        }
      }

.gmnoprint {display:none;}
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?sensor=true&libraries=places"></script>
    <script>
      var directionDisplay;
      var directionsService = new google.maps.DirectionsService();
      var a;
      var b;
      var latandlon;

      function initialize()
       {
        navigator.geolocation.getCurrentPosition(create_a_var);
       }

      function create_a_var(position)
       {

        a = position.coords.latitude;

        b = position.coords.longitude;

        latandlon = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

        loadmapscript();

       }

      function loadmapscript() {
        directionsDisplay = new google.maps.DirectionsRenderer();
        var mapOptions = {
          zoom: 15,
          mapTypeId: google.maps.MapTypeId.ROADMAP,
          center: new google.maps.LatLng(a, b),
          disableDefaultUI: true
        };
        var map = new google.maps.Map(document.getElementById('map_canvas'),
            mapOptions);
        directionsDisplay.setMap(map);
        directionsDisplay.setPanel(document.getElementById('directions-panel'));

        var control = document.getElementById('control');
        control.style.display = 'block';
        map.controls[google.maps.ControlPosition.TOP].push(control);

        var request = {
        location: latandlon,
        radius: 10000,
        types: ['bar', 'restaurant', 'cafe']
        };


      }

      function calcRoute() {
        var start = latandlon;
        var end = "Darwin, NT, Australia";
        var request = {
          origin: start,
          destination: end,
          travelMode: google.maps.DirectionsTravelMode.DRIVING,
        };
        directionsService.route(request, function(response, status) {
          if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
          }
        });
      }

      function createMarker(place) {
      var placeLoc = place.geometry.location;
      var marker = new google.maps.Marker({
      map: map,
      position: place.geometry.location
      });

      google.maps.event.addListener(marker, 'click', function() {
      alert(place.name);
      });
      }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="control">
      <strong>Start:</strong>
      <button id="start" onclick="calcRoute();">Click Me Please :)</button>
    </div>
    <div id="directions-panel"></div>
    <div id="map_canvas"></div>
  </body>
</html>

var directionDisplay; var directionService = new google.maps.DirectionsService(); вар а; вар б; вар латандлон; вар карта; функция инициализации () { navigator.geolocation.getCurrentPosition (create_a_var); }

  function create_a_var(position)
   {

    a = position.coords.latitude;

    b = position.coords.longitude;

    latandlon = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

    loadmapscript();

   }

  function loadmapscript() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    var mapOptions = {
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: new google.maps.LatLng(a, b),
      disableDefaultUI: true
    };
    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById('directions-panel'));

    var control = document.getElementById('control');
    control.style.display = 'block';
    map.controls[google.maps.ControlPosition.TOP].push(control);

    var request2 = {
    location: latandlon,
    radius: 10000,
    types: ['bar', 'restaurant', 'cafe']
    };

  }

  function calcRoute() {
    var start = latandlon;
    var end = "Darwin, NT, Australia";
    var request = {
      origin: start,
      destination: end,
      travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(response);
      }
    });
  }

  function createMarker(place) {
  var placeLoc = place.geometry.location;
  var marker = new google.maps.Marker({
  map: map,
  position: place.geometry.location
  });

  google.maps.event.addListener(marker, 'click', function() {
  alert(place.name);
  });
  }

  google.maps.event.addDomListener(window, 'load', initialize);

person user1543582    schedule 12.10.2012    source источник


Ответы (1)


'map' — это локальная переменная для вашей функции loadmapscript. Затем вы пытаетесь сослаться на него в своей функции createMarker, которая не имеет доступа к этой переменной. Вместо этого сделайте карту глобальной переменной.

Удалите здесь запятую в конце строки TravelMode. Это вызовет ошибку в Internet Explorer:

 var request = {
          origin: start,
          destination: end,
          travelMode: google.maps.DirectionsTravelMode.DRIVING,
        };

У вас есть функция createMarker, но ничто в вашем коде не вызывает эту функцию... поэтому нет маркеров.

person duncan    schedule 12.10.2012
comment
Пока ничего, но спасибо за помощь, я использую для этого сафари и хром, поддержка ie не требуется. Я новичок в javascript кстати. :/ - person user1543582; 12.10.2012
comment
хорошо :), я довольно безнадежен в js, так что, вероятно, это не имеет ничего общего с тем, что вы сказали :(, в любом случае, большое спасибо за помощь :) - person user1543582; 12.10.2012
comment
У вас все еще нет ничего, вызывающего вашу функцию createMarker, поэтому маркеры не отображаются. - person duncan; 14.10.2012