使用 Google Autocomplete API 根据位置名称获取纬度和经度

IT技术 javascript google-maps geocoding latitude-longitude
2021-03-17 14:32:57

我的页面中有一个文本框,它获取位置名称和带有文本的按钮getLat&Long现在,在我的点击按钮,我必须表明的警报latitude,并longitude在文本框的位置。有什么建议吗?

6个回答

您可以使用谷歌地理编码服务的在谷歌地图API从您的位置名转换为纬度和经度。所以你需要一些代码,如:

var geocoder = new google.maps.Geocoder();
var address = document.getElementById("address").value;
geocoder.geocode( { 'address': address}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK)
  {
      // do something with the geocoded result
      //
      // results[0].geometry.location.latitude
      // results[0].geometry.location.longitude
  }
});

更新

您是否包括 v3 javascript API?

<script type="text/javascript"
     src="http://maps.google.com/maps/api/js?sensor=set_to_true_or_false">
</script> 
传感器真假的区别是什么?
2021-04-21 14:32:57
它应该是results[0].geometry.location.lat()results[0].geometry.location.lng()
2021-04-28 14:32:57
不再使用或不需要传感器参数。stackoverflow.com/questions/8616764/...
2021-05-01 14:32:57

我希望这可以帮助将来的某个人。

你可以使用谷歌地理编码 API,如前所述,我最近不得不做一些工作,我希望这会有所帮助:

<!DOCTYPE html>
<html>
    <head>
        <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
        <script type="text/javascript">
        function initialize() {
        var address = (document.getElementById('my-address'));
        var autocomplete = new google.maps.places.Autocomplete(address);
        autocomplete.setTypes(['geocode']);
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            var place = autocomplete.getPlace();
            if (!place.geometry) {
                return;
            }

        var address = '';
        if (place.address_components) {
            address = [
                (place.address_components[0] && place.address_components[0].short_name || ''),
                (place.address_components[1] && place.address_components[1].short_name || ''),
                (place.address_components[2] && place.address_components[2].short_name || '')
                ].join(' ');
        }
      });
}
function codeAddress() {
    geocoder = new google.maps.Geocoder();
    var address = document.getElementById("my-address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {

      alert("Latitude: "+results[0].geometry.location.lat());
      alert("Longitude: "+results[0].geometry.location.lng());
      } 

      else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }
google.maps.event.addDomListener(window, 'load', initialize);

        </script>
    </head>
    <body>
        <input type="text" id="my-address">
        <button id="getCords" onClick="codeAddress();">getLat&Long</button>
    </body>
</html>

现在这还有一个自动完成功能,您可以在代码中看到它,它从输入中获取地址并在键入时由 API 自动完成。

一旦你有你的地址点击按钮,你就会根据需要通过警报获得结果。另请注意,这使用最新的 API 并加载“地点”库(调用 API 时使用“库”参数)。

希望这会有所帮助,并阅读文档以获取更多信息,干杯。

编辑#1小提琴

是啊谢谢!lat() lng() 是完美的,因为似乎从请求到请求随机更改,实际属性如“k”和“A”或其他一些奇怪的属性,如 lat lng。你很酷。
2021-05-06 14:32:57
@Ariel 我使用了你的代码,但在我的应用程序中使用相同的代码被拒绝,但在小提琴中它工作正常,为什么?
2021-05-16 14:32:57
这是否需要 API 密钥?
2021-05-20 14:32:57
@Supertecnoboff 在没有 API 密钥的情况下工作,但您不会得到好处。查看 Google 对以下内容的评价:API Key我还做了一个:Fiddle
2021-05-20 14:32:57
@3rules 我不知道为什么它对你不起作用。我只是在本地尝试过,完全没有问题,只是上传了一个 pastebin 以便您可以复制和粘贴此 html:pastebin.com/BQSZwm6D将其复制并粘贴到新的 html 中并打开它,它对我有用。在公开相关代码的 SO 中打开一个新问题,并给我一个链接来查看它。干杯!
2021-05-20 14:32:57

http://maps.googleapis.com/maps/api/geocode/OUTPUT?address=YOUR_LOCATION&sensor=true

输出 = json 或 xml;

有关 google map api 的详细信息,请访问 url:

http://code.google.com/apis/maps/documentation/geocoding/index.html

希望这会有所帮助

这太棒了!只是一个问题,这是否需要 API 密钥?
2021-05-20 14:32:57

下面是我使用的代码。它工作得很好。

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

        // Add some code to work with myLatLng              

    } else {
        alert("Geocode was not successful for the following reason: " + status);
    }
});

希望这会有所帮助。

我希望这对未来的范围更有用,包含带有纬度和经度的自动完成 Google API 功能

var latitude = place.geometry.location.lat();
var longitude = place.geometry.location.lng();  

完整视图

<!DOCTYPE html>
<html>
    <head>
    <title>Place Autocomplete With Latitude & Longitude </title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
#pac-input {
    background-color: #fff;
    padding: 0 11px 0 13px;
    width: 400px;
    font-family: Roboto;
    font-size: 15px;
    font-weight: 300;
    text-overflow: ellipsis;
}
#pac-input:focus {
    border-color: #4d90fe;
    margin-left: -1px;
    padding-left: 14px;  /* Regular padding-left + 1. */
    width: 401px;
}
}
</style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places"></script>
    <script>


  function initialize() {
        var address = (document.getElementById('pac-input'));
        var autocomplete = new google.maps.places.Autocomplete(address);
        autocomplete.setTypes(['geocode']);
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            var place = autocomplete.getPlace();
            if (!place.geometry) {
                return;
            }

        var address = '';
        if (place.address_components) {
            address = [
                (place.address_components[0] && place.address_components[0].short_name || ''),
                (place.address_components[1] && place.address_components[1].short_name || ''),
                (place.address_components[2] && place.address_components[2].short_name || '')
                ].join(' ');
        }
        /*********************************************************************/
        /* var address contain your autocomplete address *********************/
        /* place.geometry.location.lat() && place.geometry.location.lat() ****/
        /* will be used for current address latitude and longitude************/
        /*********************************************************************/
        document.getElementById('lat').innerHTML = place.geometry.location.lat();
        document.getElementById('long').innerHTML = place.geometry.location.lng();
        });
  }

   google.maps.event.addDomListener(window, 'load', initialize);

    </script>
    </head>
    <body>
<input id="pac-input" class="controls" type="text"
        placeholder="Enter a location">
<div id="lat"></div>
<div id="long"></div>
</body>
</html>