0

如果我订阅了Google Maps API,但未订阅Google Places API,但是有可能从搜索词找到位置地点搜索没有地点的Google地图框

类似的东西来this CODEPEN(使用场所)

(function() { 
 

 
    var marker; 
 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    var input = document.getElementById('search'); 
 
    var searchBox = new google.maps.places.SearchBox(input); 
 
    
 
    google.maps.event.addListener(searchBox, 'places_changed', updateMap); 
 

 
    function updateMap() { 
 
    var places = searchBox.getPlaces(); 
 
    var place = places[0]; 
 
    var radius = 1000000; 
 

 
    if (marker) { marker.setMap(null); } 
 

 
    marker = new google.maps.Marker({ 
 
     map: map, title: place.name, 
 
     position: place.geometry.location 
 
    }); 
 

 
    var circle = new google.maps.Circle({ 
 
     center: marker.position, radius: radius 
 
    }); 
 
    map.fitBounds(circle.getBounds()); 
 
    } 
 
})();
<input id="search" type="text" placeholder="Search Here"> 
 
<h2/> 
 
<div id="map"></div>

回答

2

你可以利用Geocoding Service用于这一目的:

的谷歌地图API提供了一个地理编码类地理编码和 从用户输入动态地反向地理编码。

function initMap() { 
 

 
    var marker; 
 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    var btnSearch = document.getElementById('btnSearch'); 
 
    addEvent(btnSearch, 'click', function() { 
 
     var input = document.getElementById('search'); 
 
     updateMap(map, input.value); 
 
    }); 
 
} 
 

 

 

 
function updateMap(map, address) { 
 

 
    var geocoder = new google.maps.Geocoder(); 
 
    if (geocoder) { 
 
     geocoder.geocode({ 'address': address }, function (results, status) { 
 
      if (status == google.maps.GeocoderStatus.OK) { 
 
       //console.log(results[0].geometry.location); 
 

 
       var result = results[0]; 
 
       var radius = 1000000; 
 
       var marker = new google.maps.Marker({ 
 
        map: map, 
 
        title: result.formatted_address, 
 
        position: result.geometry.location 
 
       }); 
 

 
       var circle = new google.maps.Circle({ 
 
        center: marker.position, 
 
        radius: radius 
 
       }); 
 
       map.fitBounds(circle.getBounds()); 
 

 
      } 
 
      else { 
 
       console.log("Geocoding failed: " + status); 
 
      } 
 
     }); 
 
    } 
 

 

 
} 
 

 

 
function addEvent(element, evnt, funct) { 
 
    if (element.attachEvent) 
 
     return element.attachEvent('on' + evnt, funct); 
 
    else 
 
     return element.addEventListener(evnt, funct, false); 
 
}
#map{ 
 
    width: 640px; 
 
    height: 480px; 
 
}
<input id="search" type="text" placeholder="Search Here"> 
 
    <button id="btnSearch">Search</button> 
 
    <h2 /> 
 
    <div id="map"></div> 
 
    <script src="https://maps.googleapis.com/maps/api/js?callback=initMap" 
 
       async defer></script>