2015-09-10 36 views
1

當我在此地圖上搜索地址時,它會放大太多地圖無用的地方。我試圖調整地圖邊界,但它沒有幫助。我認爲我在正確的道路上,但它只是不工作。有人可以幫我解決這個問題嗎?如何在搜索執行後控制縮放?

<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="utf-8"> 
 
<title>Untitled Document</title> 
 
</head> 
 
<style> 
 
#googft-mapCanvas { 
 
    height: 600px; 
 
    margin: 0; 
 
    padding: 0; 
 
    width: 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> 
 
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places"></script> 
 
<input id="pac-input" class="controls" type="text" placeholder="Enter your address here"> 
 
<div id="googft-mapCanvas"></div> 
 
<script> 
 
function initialize() { 
 
    google.maps.visualRefresh = true; 
 
    var isMobile = (navigator.userAgent.toLowerCase().indexOf('android') > -1) || (navigator.userAgent.match(/(iPod|iPhone|iPad|BlackBerry|Windows Phone|iemobile)/)); 
 
    if (isMobile) { 
 
     var viewport = document.querySelector("meta[name=viewport]"); 
 
     viewport.setAttribute('content', 'initial-scale=1.0, user-scalable=no'); 
 
    } 
 

 
    var mapDiv = document.getElementById('googft-mapCanvas'); 
 
    mapDiv.style.width = isMobile ? '100%' : '1000px'; 
 
    mapDiv.style.height = isMobile ? '100%' : '300px'; 
 
    var map = new google.maps.Map(mapDiv, { 
 
     center: new google.maps.LatLng(38.64936217820852, -90.53628850000001), 
 
     zoom: 9, 
 
     mapTypeId: google.maps.MapTypeId.HYBRID 
 
    }); 
 
    map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(document.getElementById('googft-legend-open')); 
 
    map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(document.getElementById('googft-legend')); 
 

 
    layer = new google.maps.FusionTablesLayer({ 
 
     map: map, 
 
     heatmap: { 
 
      enabled: false 
 
     }, 
 
     query: { 
 
      select: "col26", 
 
      from: "11Q0B7iRayT2JIOBl8_VRUmitimhX1W01byuFDnAv", 
 
      where: "" 
 
     }, 
 
     options: { 
 
      styleId: 2, 
 
      templateId: 2 
 
     } 
 
    }); 
 
    if (isMobile) { 
 
     var legend = document.getElementById('googft-legend'); 
 
     var legendOpenButton = document.getElementById('googft-legend-open'); 
 
     var legendCloseButton = document.getElementById('googft-legend-close'); 
 
     legend.style.display = 'none'; 
 
     legendOpenButton.style.display = 'block'; 
 
     legendCloseButton.style.display = 'block'; 
 
     legendOpenButton.onclick = function() { 
 
      legend.style.display = 'block'; 
 
      legendOpenButton.style.display = 'none'; 
 
     } 
 
     legendCloseButton.onclick = function() { 
 
      legend.style.display = 'none'; 
 
      legendOpenButton.style.display = 'block'; 
 
     } 
 
    } 
 
    var marker = new google.maps.Marker({ 
 
     position: new google.maps.LatLng(38.64936217820852, -90.53628850000001), 
 
     map: map, 
 
     draggable: true, 
 
     title: "Your New Home", 
 
    }); 
 
    // 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()); 
 
    }); 
 

 
    // 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; 
 
    } 
 
    // For each place, get the icon, name and location. 
 
    var bounds = new google.maps.LatLngBounds(); 
 
    places.forEach(function(place) { 
 
     if (place.geometry.viewport) { 
 
     // Only geocodes have viewport. 
 
     bounds.union(place.geometry.viewport); 
 
     } 
 
     else { 
 
     bounds.extend(place.geometry.location); 
 
     } 
 
     // now let's move the marker 
 
     marker.setPosition(place.geometry.location); 
 
    }); 
 
    map.fitBounds(bounds); 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, 'load', initialize); 
 
</script> 
 
<body> 
 
</body> 
 
</html>

+0

你是什麼意思「」它放大太多地圖是無用的地方「?你能提供一個地址的例子嗎?你期望發生什麼?你想要什麼最大變焦看看? – geocodezip

+0

如果你搜索700 Clark Ave,St. Louis,MO 63102,它會放大,讓你看到的是你正在尋找的建築。我不確定最大變焦,我想玩我希望可以看到寄宿學校的區域 – user2348902

回答

0

在你的代碼,你可以使用map.fitBounds(bounds);,這boundsplace.geometry.viewport從搜索結果中,返回其默認縮放盡可能多的,因爲它可以。相反,您希望平移到新位置,這會保存您當前的縮放級別。請參閱this jsfiddle demo瞭解更多信息。

+0

如何將這個變成縮放到17而不是當前邊界謝謝你的幫助 – user2348902

+0

你也許可以在地圖類中使用setZoom。在文檔中:https://developers.google.com/maps/documentation/javascript/reference#Map – kaho