2014-11-21 75 views
0

我想实施这Location Search插件到我的地图。它根本没有工作,但控制台日志中没有任何错误。你能帮我一下,不幸的是,我不是一个JavaScript专家。谷歌地图Api v3位置搜索与jQuery自动完成插件

谢谢!

我的代码:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script> 
<input type="text" value="" id="searchbox" style=" width:800px;height:30px; font-size:15px;"> 
<div id="map-canvas" style="width:100%; height:650px; margin:0 auto;"></div> 
<script> 
var map = null; 
      function initialize() 

      { 
       var mapOptions = 
       { 
       zoom: 8, 
       center:new google.maps.LatLng(47.165843,18.9483089) 
       }; 
      map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
loadXMLFile(); 
    var geocoder = new google.maps.Geocoder(); 
jQuery(function() { 
     jQuery("#searchbox").autocomplete({ 

      source: function(request, response) { 

      if (geocoder == null){ 
      geocoder = new google.maps.Geocoder(); 
      } 
      geocoder.geocode({'address': request.term }, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 

        var searchLoc = results[0].geometry.location; 
       var lat = results[0].geometry.location.lat(); 
        var lng = results[0].geometry.location.lng(); 
        var latlng = new google.maps.LatLng(lat, lng); 
        var bounds = results[0].geometry.bounds; 

        geocoder.geocode({'latLng': latlng}, function(results1, status1) { 
         if (status1 == google.maps.GeocoderStatus.OK) { 
         if (results1[1]) { 
         response(jQuery.map(results1, function(loc) { 
         return { 
          label : loc.formatted_address, 
          value : loc.formatted_address, 
          bounds : loc.geometry.bounds 
          } 
         })); 
         } 
         } 
        }); 
      } 
       }); 
      }, 
      select: function(event,ui){ 
     var pos = ui.item.position; 
     var lct = ui.item.locType; 
     var bounds = ui.item.bounds; 

     if (bounds){ 
     map.fitBounds(bounds); 
     } 
      } 
     }); 
    }); 
      } 
      function loadXMLFile(){ 
      var filename = '<?php echo get_template_directory_uri(); ?>/scripts/mylist.xml.cache'; 
      jQuery.ajax({ 
       type: "GET", 
       url: filename , 
       dataType: "xml", 
       success: parseXML, 
       error : onXMLLoadFailed 
      }); 

      function onXMLLoadFailed(){ 
      alert("Error loading xml."); 
        jQuery.ajax({ url: '<?php echo get_template_directory_uri(); ?>/scripts/getxml.php', 
      dataType: "xml", 
     type: "GET" 
}); 

      } 
      function parseXML(xml){ 
     var bounds = new google.maps.LatLngBounds(); 
      jQuery(xml).find("Shop").each(function(){ 
       var nme = jQuery(this).find('Name').text(); 
       var address = jQuery(this).find('Address').text(); 
       var monday = jQuery(this).find('Monday').text(); 
       var tuesday = jQuery(this).find('Tuesday').text(); 
       var wednesday = jQuery(this).find('Wednesday').text(); 
       var thursday = jQuery(this).find('Thursday').text(); 
       var friday = jQuery(this).find('Friday').text(); 
       var saturday = jQuery(this).find('Saturday').text(); 
       var sunday = jQuery(this).find('Sunday').text(); 
       var lat = jQuery(this).find('Lat').text(); 
       var lng = jQuery(this).find('Lng').text(); 
       var markerCoords = new google.maps.LatLng(lat.replace(',', '.'),lng.replace(',', '.')); 
       var image = { 
       url: '<?php echo get_template_directory_uri(); ?>/images/markerimage2.png', 
       size: new google.maps.Size(36, 24), 
       origin: new google.maps.Point(0, 0), 
       scaledSize: new google.maps.Size(36, 24) 
      }; 


      var contentString = '<div id="infobox">'+ 
     '<div id="siteNotice">'+ 
     '</div>'+ 
     '<h5 id="firstHeading" class="firstHeading">'+nme+'</h5>'+ 
     '<div id="bodyContent">'+ 
     '<p><b>Openings:</b><br />'+ 
     'Monday: '+monday+'<br />'+ 
     'Tuesday: '+tuesday+'<br />'+ 
     'Wednesday: '+wednesday+'<br />'+ 
     'Thursday: '+thursday+'<br />'+ 
     'Friday: '+friday+'<br />'+ 
     'Saturday: '+saturday+'<br />'+ 
     'Sunday: '+sunday+'<br />'+ 

    '</p>'+ 
     '</div>'+ 
     '</div>'; 

    var infowindow = new google.maps.InfoWindow({ 
     content: contentString 
    }); 

      var marker = new google.maps.Marker({ 
        position: markerCoords, 
        map: map, 
        icon: image, 
        title:nme 
       }); 
        google.maps.event.addListener(marker, 'click', function() { 
    infowindow.open(map,marker); 
    }); 

      }); 

     jQuery.ajax({ url: '<?php echo get_template_directory_uri(); ?>/scripts/getxml.php', 
      dataType: "xml", 
     type: "GET" 
}); 
     } 
} 
google.maps.event.addDomListener(window, 'load', initialize); 
</script> 

回答

0

这个例子,你正在寻找一个老版本的谷歌地图API的做。当前版本有一个自动完成小部件来处理你的用例。简单地做

var input = document.getElementById('searchbox'); 
var autocomplete = new google.maps.places.Autocomplete(input); 

每当一个人挑选建议的位置之一,一个place_changed将触发事件,那么你可以设置一个侦听器来检测这个事件,并且应对地方:

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    var place = autocomplete.getPlace(); 
    console.log('place changed', place); 
}); 

根据在什么样的地方,你应该选择什么时候最好是将地图集中在给定的点上,或者将地图边界放在特定的边界框上。

+0

啊,这比它容易得多。谢谢@amenadiel,在你的帮助下,我完成了我的代码,现在它完美的工作! – Chuchy 2014-11-21 16:44:01

相关问题