2016-02-24 32 views
-1

我想使用Google地圖標記來標記我們提供服務的地點。 我使用緯度/長度的代碼工作正常,但在我的項目中,我需要使用城市名稱而不是緯度/長度。我怎樣才能做到這一點有沒有辦法做到這一點? 這裏是我的代碼如何在Google地圖API中使用地址代替緯度/經度

 <div id="map" style="height:500px;"></div> 
    <script> 
     var neighborhoods = [ 
      { lat: 31.6400, lng: 74.8600 }, 
      { lat: 28.6139, lng: 77.2090 }, 
      { lat: 12.9667, lng: 77.5667 }, 
      { lat: 31.3260, lng: 75.5760 }, 
      { lat: 30.7500, lng: 76.7800 }, 
      { lat: 30.3400, lng: 76.3800 } 
     ]; 

     var markers = []; 
     var map; 

     function initMap() { 
      map = new google.maps.Map(document.getElementById('map'), { 
       zoom: 5, 
       center: { lat: 28.6139, lng: 77.2090 } 
      }); 
     } 

     function drop() { 
      clearMarkers(); 
      for (var i = 0; i < neighborhoods.length; i++) { 
       addMarkerWithTimeout(neighborhoods[i], i * 200); 
      } 
     } 

     function addMarkerWithTimeout(position, timeout) { 
      window.setTimeout(function() { 
       markers.push(new google.maps.Marker({ 
        position: position, 
        map: map, 
        title: 'Jassie', 
        animation: google.maps.Animation.DROP 
       })); 
      }, timeout); 
     } 

     function clearMarkers() { 
      for (var i = 0; i < markers.length; i++) { 
       markers[i].setMap(null); 
      } 
      markers = []; 
     } 
     $(window).load(function() { 
      drop(); 
     }); 
    </script> 
    <script async defer src="https://maps.googleapis.com/maps/api/js?key=API_Key&signed_in=true&callback=initMap"> </script> 
</div> 
+0

[使用地址,而不是經度和緯度與谷歌地圖API]的可能重複(http://stackoverflow.com/questions/15925980/using-address-instead-經緯度與谷歌地圖 - api) – geocodezip

+0

[多個標記谷歌地圖API v3從地址數組,並避免OVER_QUERY_LIMIT,而地理編碼在pageLoad](http://stackoverflow.com/questions/ 19640055 /多標記-谷歌地圖-API-V3-從陣列-位址與規避-過查詢的) – geocodezip

回答

0

您必須使用地理編碼API。以Lat/lng爲地址的示例:

doGeocode: function (address, postal_code, callback) { 
    console.log("TEST: "+address.toString()); 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 
     'address': address, 
     'componentRestrictions': { 
      'postalCode': postal_code, 
      'country': 'de' 
     } 
    }, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      callback(results); 
     } else { 
      //Error handling 
      alert('Geocode was not successful for the following reason: ' + status); 
     } 
    }); 

注意:該地址還可以包含h​​ouseNumber,但輸入一個空白。

從Lat/lng獲取地址也有相反的方法。以防萬一,一些需求是:

reverseGeocoder: function (lat, lng, callback) { 

    var geocoder = new google.maps.Geocoder; 
    var addressComponents = {}; 
    geocoder.geocode({ 
     'location': { 
      lat:lat, 
      lng: lng 
     } 
    }, function (results, status){ 
     if(status === google.maps.GeocoderStatus.OK){ 
      if (results[1]) { 
       var result = results[0].address_components; 

       for (var i = 0; i < result.length; i++) { 
        if (result[i].types[0] == "route") { 
         console.log(result[i].long_name); 
         addressComponents.route = result[i].long_name 
        } 
        if (result[i].types[0] == "street_number") { 
         console.log(result[i].long_name); 
         addressComponents.street_number = result[i].long_name 
        } 
        if (result[i].types[0] == "locality") { 
         console.log(result[i].long_name); 
         addressComponents.locality = result[i].long_name 
        } 
        if (result[i].types[0] == "postal_code") { 
         console.log(result[i].long_name); 
         addressComponents.postal_code = result[i].long_name 
        } 
       } 
       callback(addressComponents); 
      } else { 
       alert('No information found.'); 
      } 

     }else { 
      alert("Die geolocation abfrage konnte leider nicht ausgeführt werden. "+status); 
     } 
    }); 

從第一功能上面,你會得到的緯度/經度。 然後只需使用這樣的功能:

var newMarkers = [];  //Global marker array 
marker: function (lat, lng) { 
    console.log("new marker"); 

    //console.log("LAT: "+lat+ "LNG: "+lng); 
    var marker = new google.maps.Marker({ 
     position: {lat: lat, lng: lng}, 
     icon: icon, 
     map: map 
    }); 
    markers.push(marker); 
    marker.addListener('click', function() { 
     //InfoWindow or whatever u want 
    }); 

    map.setCenter({lat: lat, lng: lng}); 
    map.setZoom(16); 
}, 
相關問題