Google's Geocoder returns wrong country, ignoring the region hint

后端 未结 13 957
孤城傲影
孤城傲影 2020-12-07 21:03

I\'m using Google\'s Geocoder to find lat lng coordinates for a given address.

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode(
    {
            


        
相关标签:
13条回答
  • 2020-12-07 21:51

    UPDATE: This answer may not be the best approach anymore. See the comments below the answer for more details.


    In addition to what Pekka already suggested, you may want to concatenate ', UK' to your address, as in the following example:

    <!DOCTYPE html>
    <html> 
    <head> 
       <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
       <title>Google Maps Geocoding only in UK Demo</title> 
       <script src="http://maps.google.com/maps/api/js?sensor=false" 
               type="text/javascript"></script> 
    </head> 
    <body> 
       <div id="map" style="width: 400px; height: 300px"></div> 
    
       <script type="text/javascript"> 
    
       var mapOptions = { 
          mapTypeId: google.maps.MapTypeId.TERRAIN,
          center: new google.maps.LatLng(54.00, -3.00),
          zoom: 5
       };
    
       var map = new google.maps.Map(document.getElementById("map"), mapOptions);
       var geocoder = new google.maps.Geocoder();
    
       var address = 'Boston';
    
       geocoder.geocode({
          'address': address + ', UK'
       }, 
       function(results, status) {
          if(status == google.maps.GeocoderStatus.OK) {
             new google.maps.Marker({
                position:results[0].geometry.location,
                map: map
             });
          }
       });
    
       </script> 
    </body> 
    </html>
    

    Screenshot:

    Geocoding only in UK

    I find that this is very reliable. On the other hand, the following example shows that neither the region parameter, nor the bounds parameter, are having any effect in this case:

    <!DOCTYPE html>
    <html> 
    <head> 
       <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
       <title>Google Maps Geocoding only in UK Demo with Bounds</title> 
       <script src="http://maps.google.com/maps/api/js?sensor=false" 
               type="text/javascript"></script> 
    </head> 
    <body> 
       <div id="map" style="width: 500px; height: 300px"></div> 
    
       <script type="text/javascript"> 
    
       var mapOptions = { 
          mapTypeId: google.maps.MapTypeId.TERRAIN,
          center: new google.maps.LatLng(50.00, -33.00),
          zoom: 3
       };
    
       var map = new google.maps.Map(document.getElementById("map"), mapOptions);   
       var geocoder = new google.maps.Geocoder();
    
       // Define north-east and south-west points of UK
       var ne = new google.maps.LatLng(60.00, 3.00);
       var sw = new google.maps.LatLng(49.00, -13.00);
    
       // Define bounding box for drawing
       var boundingBoxPoints = [
          ne, new google.maps.LatLng(ne.lat(), sw.lng()),
          sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
       ];
    
       // Draw bounding box on map    
       new google.maps.Polyline({
          path: boundingBoxPoints,
          strokeColor: '#FF0000',
          strokeOpacity: 1.0,
          strokeWeight: 2,
          map: map
       });
    
       // Geocode and place marker on map
       geocoder.geocode({
          'address': 'Boston',
          'region':  'uk',
          'bounds':  new google.maps.LatLngBounds(sw, ne)
       }, 
       function(results, status) {
          if(status == google.maps.GeocoderStatus.OK) {
             new google.maps.Marker({
                position:results[0].geometry.location,
                map: map
             });
          }
       });
    
       </script> 
    </body> 
    </html>
    
    0 讨论(0)
提交回复
热议问题