将此infowindow导航链接代码添加到我的KML搜索代码中

时间:2015-12-22 22:09:20

标签: search dictionary kml kmz

我希望结合以下两个代码来创建一个地图,不仅可以在顶部搜索KMZ图层,还可以在infowindow中显示导航选项。并排的两个地图的示例可以是viewed here。但我想将两张地图合二为一。我在这篇帖子的底部包含了我的尝试 - 但它不起作用。

  1. 首先,我已经调整了这个代码,用于搜索我的kmz(或kml)分层的地图,它的效果很好......
  2. 
    
    <!DOCTYPE html>
    <html>
      <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
        <meta charset="utf-8">
        <style>
          html, body {
            height: 100%;
            margin: 0;
            padding: 0;
          }
          #map-canvas {
            height: 100%;
          }
    .controls {
      margin-top: 10px;
      border: 1px solid transparent;
      border-radius: 2px 0 0 2px;
      box-sizing: border-box;
      -moz-box-sizing: border-box;
      height: 32px;
      outline: none;
      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
    }
    
    #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: 300px;
    }
    
    #pac-input:focus {
      border-color: #4d90fe;
    }
    
    .pac-container {
      font-family: Roboto;
    }
    
    #type-selector {
      color: #fff;
      background-color: #4d90fe;
      padding: 5px 11px 0px 11px;
    }
    
    #type-selector label {
      font-family: Roboto;
      font-size: 13px;
      font-weight: 300;
    }
    
        </style>
        <title>Places Searchbox</title>
        <style>
          #target {
            width: 345px;
          }
        </style>
      </head>
      <body>
        <input id="pac-input" class="controls" type="text" placeholder="Search Box">
        <div id="map-canvas"></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.
    
    function initAutocomplete() {
      var map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: {lat:53.6292604,lng:-2.9380916},
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });
    var mapLayer = new google.maps.KmlLayer({
    url: "https://www.google.com/maps/d/kml?mid=zQWA66D2AmlU.kGvUUZ4wvdYo",
    suppressInfoWindows:false,
    preserveViewport:true });
    mapLayer.setMap(map);
    
    
      // 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 = [];
      // [START region_getplaces] this was the first to cause problems
      // 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) {
          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);
      });
      // [END region_getplaces]
    }
    
    
        </script>
        <script src="https://maps.googleapis.com/maps/api/js?key=[MY-KEY]&libraries=places&callback=initAutocomplete"
             async defer></script>
      </body>
    </html>
    &#13;
    &#13;
    &#13;

    1. 第二段代码非常适合在信息窗口添加方向链接,因此您可以使用智能手机在那里开车......
    2. &#13;
      &#13;
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
      <html><head>
      <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
      <meta charset="utf-8"><title>Embedded Map</title>
      
      <style>
      html, body, #map-canvas {
      height: 100%;
      margin: 0px;
      padding: 0px
      }
      </style>
      <script src="https://maps.googleapis.com/maps/api/js?v=3"></script>
      <script>
      var map;
      var infowindow;
      function initialize() {
      var mapOptions = {center: {lat:53.6292604,lng:-2.9380916},
      zoom: 5}
      map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
      var mapLayer = new google.maps.KmlLayer({
      url: "https://www.google.com/maps/d/kml?mid=zQWA66D2AmlU.kGvUUZ4wvdYo",
      suppressInfoWindows:true,
      preserveViewport:true });
      mapLayer.setMap(map);
      google.maps.event.addListener(mapLayer, 'click', function(kmlEvent) {
      var text = kmlEvent.featureData.infoWindowHtml;
      text = text + '<br><a href="http://maps.google.com/maps?daddr=loc:'+kmlEvent.latLng.toUrlValue(6)+'" target="_blank">Navigate to Here</a>';
      if (infowindow) { infowindow.setContent(text);
      } else {
      infowindow = new google.maps.InfoWindow({content: text});
      }
      infowindow.setOptions({position:kmlEvent.latLng, pixelOffset:kmlEvent.pixelOffset});
      infowindow.open(map);
      });
      }
      google.maps.event.addDomListener(window, 'load', initialize);
      </script></head>
      <body>
      <div id="map-canvas"></div>
      </body></html>
      &#13;
      &#13;
      &#13;

      1. 将这两个脚本放在一起,它看起来像这样,虽然这不起作用。感谢任何有关这里出错的答案,请...
      2. &#13;
        &#13;
        <!DOCTYPE html>
        <html>
          <head>
            <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
            <meta charset="utf-8">
            <style>
              html, body {
                height: 100%;
                margin: 0;
                padding: 0;
              }
              #map-canvas {
                height: 100%;
              }
        .controls {
          margin-top: 10px;
          border: 1px solid transparent;
          border-radius: 2px 0 0 2px;
          box-sizing: border-box;
          -moz-box-sizing: border-box;
          height: 32px;
          outline: none;
          box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
        }
        
        #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: 300px;
        }
        
        #pac-input:focus {
          border-color: #4d90fe;
        }
        
        .pac-container {
          font-family: Roboto;
        }
        
        #type-selector {
          color: #fff;
          background-color: #4d90fe;
          padding: 5px 11px 0px 11px;
        }
        
        #type-selector label {
          font-family: Roboto;
          font-size: 13px;
          font-weight: 300;
        }
        
            </style>
            <title>Places Searchbox</title>
            <style>
              #target {
                width: 345px;
              }
            </style>
          </head>
          <body>
            <input id="pac-input" class="controls" type="text" placeholder="Search Box">
            <div id="map-canvas"></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.
        
        function initAutocomplete() {
          var map = new google.maps.Map(document.getElementById('map-canvas'), {
            center: {lat:53.6292604,lng:-2.9380916},
            zoom: 5,
            mapTypeId: google.maps.MapTypeId.ROADMAP
          });
        var mapLayer = new google.maps.KmlLayer({
        url: "https://www.google.com/maps/d/kml?mid=zQWA66D2AmlU.kGvUUZ4wvdYo",
        suppressInfoWindows:false,
        preserveViewport:true });
        mapLayer.setMap(map);
        
        
          // 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 = [];
          // [START region_getplaces] this was the first to cause problems
          // 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) {
              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);
          });
          // [END region_getplaces]
          var map;
        var infowindow;
        mapLayer.setMap(map);
        google.maps.event.addListener(mapLayer, 'click', function(kmlEvent) {
        var text = kmlEvent.featureData.infoWindowHtml;
        text = text + '<br><a href="http://maps.google.com/maps?daddr=loc:'+kmlEvent.latLng.toUrlValue(6)+'" target="_blank">Navigate to Here</a>';
        if (infowindow) { infowindow.setContent(text);
        } else {
        infowindow = new google.maps.InfoWindow({content: text});
        }
        infowindow.setOptions({position:kmlEvent.latLng, pixelOffset:kmlEvent.pixelOffset});
        infowindow.open(map);
        });
        }
        google.maps.event.addDomListener(window, 'load', initialize);
        }
        
        
            </script>
            <script src="https://maps.googleapis.com/maps/api/js?key=[MY-KEY]&libraries=places&callback=initAutocomplete"
                 async defer></script>
          </body>
        </html>
        &#13;
        &#13;
        &#13;

1 个答案:

答案 0 :(得分:0)

  1. 删除javascript中的最终},会产生语法错误:Uncaught SyntaxError: Unexpected token }

  2. suppressInfoWindows: false更改为suppressInfoWindows: true(删除infowindow的无关第二份副本)。

  3. 代码段

    // 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.
    
    function initAutocomplete() {
      var map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: {
          lat: 53.6292604,
          lng: -2.9380916
        },
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });
      var mapLayer = new google.maps.KmlLayer({
        url: "https://www.google.com/maps/d/kml?mid=zQWA66D2AmlU.kGvUUZ4wvdYo",
        suppressInfoWindows: true,
        preserveViewport: true
      });
      mapLayer.setMap(map);
    
    
      // 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 = [];
      // [START region_getplaces] this was the first to cause problems
      // 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) {
          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);
      });
      // [END region_getplaces]
      var map;
      var infowindow;
      mapLayer.setMap(map);
      google.maps.event.addListener(mapLayer, 'click', function(kmlEvent) {
        var text = kmlEvent.featureData.infoWindowHtml;
        text = text + '<br><a href="http://maps.google.com/maps?daddr=loc:' + kmlEvent.latLng.toUrlValue(6) + '" target="_blank">Navigate to Here</a>';
        if (infowindow && infowindow.setContent) {
          infowindow.setContent(text);
        } else {
          infowindow = new google.maps.InfoWindow({
            content: text
          });
        }
        infowindow.setOptions({
          position: kmlEvent.latLng,
          pixelOffset: kmlEvent.pixelOffset
        });
        infowindow.open(map);
      });
    }
    google.maps.event.addDomListener(window, 'load', initAutocomplete);
    html,
    body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    #map-canvas {
      height: 100%;
    }
    .controls {
      margin-top: 10px;
      border: 1px solid transparent;
      border-radius: 2px 0 0 2px;
      box-sizing: border-box;
      -moz-box-sizing: border-box;
      height: 32px;
      outline: none;
      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
    }
    #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: 300px;
    }
    #pac-input:focus {
      border-color: #4d90fe;
    }
    .pac-container {
      font-family: Roboto;
    }
    #type-selector {
      color: #fff;
      background-color: #4d90fe;
      padding: 5px 11px 0px 11px;
    }
    #type-selector label {
      font-family: Roboto;
      font-size: 13px;
      font-weight: 300;
    }
    </style> <title>Places Searchbox</title> <style> #target {
      width: 345px;
    }
    <script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
    <input id="pac-input" class="controls" type="text" placeholder="Search Box">
    <div id="map-canvas"></div>