【问题标题】:Google Maps: How do you embed it WITH search bar?谷歌地图:你如何将它嵌入搜索栏?
【发布时间】:2019-11-15 03:42:04
【问题描述】:

您好,我正在尝试将 Google 地图集成到网站中。在某个地图位置嵌入谷歌地图非常简单,因为您可以通过分享按钮生成嵌入谷歌地图本身的代码,但这会隐藏我的游戏所需的搜索栏。

<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d193595.15830869428!2d-74.119763973046!3d40.69766374874431!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89c24fa5d33f083b%3A0xc80b8f06e177fe62!2sNew%20York%20City%2C%20New%20York%2C%20USA!5e0!3m2!1sde!2sde!4v1573800931555!5m2!1sde!2sde" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen=""></iframe>

在整个网站中,玩家都会获得坐标,您可以将其输入谷歌地图以显示正确的位置。 虽然我想做的是在 iframe 中使用 默认的谷歌地图,这样人们就可以阅读和输入这些坐标,而不必经常切换页面。

有没有办法做到这一点,还是我必须为此付费?我目前正在寻找替代地图提供商。

【问题讨论】:

  • 你的代码是什么样的?您在使用 Google 地图 JavaScript API 吗?
  • 请edit 解决 cmets 的问题(cmets 中的代码很难阅读)。看起来您正在使用“免费”的嵌入式 Google 地图。这些不容易以您想要的方式定制,改变您需要使用(非免费)API 的东西。
  • 抱歉,我花了这么长时间才回复。我在早上 7 点的漫长夜班之后写了这篇文章,几乎是临睡前的那一刻,因此措辞奇怪且缺乏结构。我已经更新了帖子,希望对您有所帮助。基本上我宁愿不为我实际上不需要的大量功能付费。我只想让人们访问普通的谷歌地图(或替代地图),这样他们就可以自己输入他们正在寻找的位置,而不必经常在页面之间切换。
  • 我也许可以使用“假”或自定义文本输入字段,然后检查坐标是否正确。然后将一般区域的嵌入式地图(从一开始就在那里)与另一个显示正确位置的嵌入式地图交换。不过,我愿意接受更好的建议。

标签: javascript html google-maps


【解决方案1】:

正如 cmets 中所指出的,这可能无法通过简单的 iframe 嵌入实现。

但是,如果您使用 Google Maps API,则可以找到充足的文档here。

文档中的一个简单示例:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Places Search Box</title>
    <style>
      /* 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;
      }
      #description {
        font-family: Roboto;
        font-size: 15px;
        font-weight: 300;
      }

      #infowindow-content .title {
        font-weight: bold;
      }

      #infowindow-content {
        display: none;
      }

      #map #infowindow-content {
        display: inline;
      }

      .pac-card {
        margin: 10px 10px 0 0;
        border-radius: 2px 0 0 2px;
        box-sizing: border-box;
        -moz-box-sizing: border-box;
        outline: none;
        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
        background-color: #fff;
        font-family: Roboto;
      }

      #pac-container {
        padding-bottom: 12px;
        margin-right: 12px;
      }

      .pac-controls {
        display: inline-block;
        padding: 5px 11px;
      }

      .pac-controls label {
        font-family: Roboto;
        font-size: 13px;
        font-weight: 300;
      }

      #pac-input {
        background-color: #fff;
        font-family: Roboto;
        font-size: 15px;
        font-weight: 300;
        margin-left: 12px;
        padding: 0 11px 0 13px;
        text-overflow: ellipsis;
        width: 400px;
      }

      #pac-input:focus {
        border-color: #4d90fe;
      }

      #title {
        color: #fff;
        background-color: #4d90fe;
        font-size: 25px;
        font-weight: 500;
        padding: 6px 12px;
      }
      #target {
        width: 345px;
      }
    </style>
  </head>
  <body>
    <input id="pac-input" class="controls" type="text" placeholder="Search Box">
    <div id="map"></div>
    <script>
      // This example adds a search box to a map, using the Google Place Autocomplete
      // feature. People can enter geographical searches. The search box will return a
      // pick list containing a mix of places and predicted search terms.

      // This example requires the Places library. Include the libraries=places
      // parameter when you first load the API. For example:
      // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

      function initAutocomplete() {
        var map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -33.8688, lng: 151.2195},
          zoom: 13,
          mapTypeId: 'roadmap'
        });

        // Create the search box and link it to the UI element.
        var input = document.getElementById('pac-input');
        var searchBox = new google.maps.places.SearchBox(input);
        map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

        // Bias the SearchBox results towards current map's viewport.
        map.addListener('bounds_changed', function() {
          searchBox.setBounds(map.getBounds());
        });

        var markers = [];
        // Listen for the event fired when the user selects a prediction and retrieve
        // more details for that place.
        searchBox.addListener('places_changed', function() {
          var places = searchBox.getPlaces();

          if (places.length == 0) {
            return;
          }

          // Clear out the old markers.
          markers.forEach(function(marker) {
            marker.setMap(null);
          });
          markers = [];

          // For each place, get the icon, name and location.
          var bounds = new google.maps.LatLngBounds();
          places.forEach(function(place) {
            if (!place.geometry) {
              console.log("Returned place contains no geometry");
              return;
            }
            var icon = {
              url: place.icon,
              size: new google.maps.Size(71, 71),
              origin: new google.maps.Point(0, 0),
              anchor: new google.maps.Point(17, 34),
              scaledSize: new google.maps.Size(25, 25)
            };

            // Create a marker for each place.
            markers.push(new google.maps.Marker({
              map: map,
              icon: icon,
              title: place.name,
              position: place.geometry.location
            }));

            if (place.geometry.viewport) {
              // Only geocodes have viewport.
              bounds.union(place.geometry.viewport);
            } else {
              bounds.extend(place.geometry.location);
            }
          });
          map.fitBounds(bounds);
        });
      }

    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initAutocomplete"
         async defer></script>
  </body>
</html>

另外,我不小心撤销了我的标志,但我注意到这个问题可能会作为多个问题的重复而关闭,例如:here、here 和 here。

【讨论】:

  • 谢谢,解决方案是用 iframe 替换 Google 地图以打开街道地图。
【解决方案2】:

大部分问题都通过切换到开放的街道地图得到解决。我可以使用带有指向他们网站的链接的 iframe。它还不是很完美,但我可能能够对其进行足够的自定义以使其顺利运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多