InfoWindow "Посмотреть на Google Maps" ссылка - PullRequest
0 голосов
/ 24 октября 2018

В предыдущих версиях карт Google (3.32-3.33) можно было указать свойство с именем place в MarkerOptions при создании Marker.Затем, при открытии InfoWindow и использовании этого Marker в качестве привязки для его позиционирования, к содержанию InfoWindow автоматически добавлялась ссылка «Просмотреть на Google Картах».

Этот образец с использованием3.33 демонстрирует это - нажмите на маркер и обратите внимание на ссылку «Просмотр на Google Картах», отображаемую в InfoWindow.

Это поведение было документировано на 3.exp, что небольше доступно (но см. https://web.archive.org/web/20171014093717/developers.google.com/maps/documentation/javascript/3.exp/reference),, и, хотя это не так, оно было / было задокументировано в официальных документах , например, за 3.33 , пример, приведенный выше, показывает это в действии.

Начиная с 3.34, однако, к «1022 *» автоматически не добавляется ссылка «Просмотр на Google Картах», см. этот пример с использованием последней версии - это тот же самый пример, только ссылающийся напоследняя версия карт Google.

Была ли эта функциональность намеренно удалена в 3.34?
Или это ошибка?
Или нужно использовать другой способ, чтобы получить "Просмотр в Google"Карты "автоматически добавляются тo InfoWindow в 3.34, указав какой-либо другой параметр?
Или нужно ли добавлять такую ​​ссылку вручную?

1 Ответ

0 голосов
/ 24 октября 2018

Я не знаю ответа на ваши вопросы о том, является ли это ошибкой или она была намеренно удалена, но эта ссылка просто указывает на URL-адрес в объекте места, возвращаемом запросом мест getDetails.

Вы можете добавить его в информационное окно следующим образом:

  infowindow = new google.maps.InfoWindow({
    content: '<div><strong>' + place.name + '</strong><br>' + 'Place ID: ' + place.place_id + '<br>' + 
      place.formatted_address + '</div>'+
      // add "view on google maps
      '<div style="border-top: 1px solid rgb(204, 204, 204); margin-top: 9px; padding: 6px; font-size: 13px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-family: Roboto, Arial;">'+
      '<a href="'+place.url+'" target="_blank" rel="noopener" style="cursor: pointer; color: rgb(66, 127, 237); text-decoration: none;">View on Google Maps</a></div>'
  });

подтверждение концепции скрипта

screenshot of resulting map

фрагмент кода:

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: -33.866,
      lng: 151.196
    },
    zoom: 15
  });

  var service = new google.maps.places.PlacesService(map);

  service.getDetails({
    placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4'
  }, function(place, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
      var marker = new google.maps.Marker({
          map: map,
          position: place.geometry.location,
          place: {
            location: place.geometry.location,
            placeId: place.place_id
          }
        }),
        infowindow = new google.maps.InfoWindow({
          content: '<div><strong>' + place.name + '</strong><br>' + 'Place ID: ' + place.place_id + '<br>' + place.formatted_address + '</div>' + '<div style="border-top: 1px solid rgb(204, 204, 204); margin-top: 9px; padding: 6px; font-size: 13px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-family: Roboto, Arial;"><a href="' + place.url + '" target="_blank" rel="noopener" style="cursor: pointer; color: rgb(66, 127, 237); text-decoration: none;">View on Google Maps</a></div>' +
            '<div>API version ' + google.maps.version + '</div>'
        });

      google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map, this);
      });
      google.maps.event.trigger(marker, 'click');
    }
  });
}
/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */

#map {
  height: 100%;
}


/* Optional: Makes the sample page fill the window. */

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?libraries=places&callback=initMap">
</script>
...