Google Maps Geocoding API(如何获取纬度/经度)

Posted

技术标签:

【中文标题】Google Maps Geocoding API(如何获取纬度/经度)【英文标题】:Google Maps Geocoding API (How to get Lat/Long) 【发布时间】:2015-07-10 10:16:45 【问题描述】:

我正在开发一个与地图交互的 Web 应用程序,因此我使用的是 Google Maps javascript API (v3.0)。

该应用程序将有一个搜索框(html <input> 标签),用户可以在其中输入人类可读的地名(如“19/2 Pine Street, Seattle”)并点击按钮。输入应发送至 Google Maps API,并应返回搜索地点的地理位置(纬度和经度)。

我搜索了 Google Maps API 文档,但那里的一切都太混乱了。我希望是否有人可以帮助我定制解决方案。

这是我到目前为止所做的:

<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Demo Rails App</title>
    <script src="https://maps.googleapis.com/maps/api/js?key=[key-here]"></script>
    <script>
    var geocoder;
    function initialize() 
      geocoder = new google.maps.Geocoder();
    
    function codeAddress() 
      var address = document.getElementById("address").value;
      geocoder.geocode(  'address': address , function(r, s) 
        alert(r[0].geometry.location);
      );
    
    </script>
  </head>

  <body onload="initialize()">
    <input type="search" id="address">
    <input type="button" value="Submit" onclick="codeAddress()">
  </body>
</html>

谢谢!

【问题讨论】:

您提到了地理编码 API,所以我想您已经阅读了文档。到目前为止,您在尝试时遇到了什么困难? @TaoP.R.目前,代码采用搜索输入并提醒预测的纬度/经度。但我也需要自动完成功能(在打字时,它会显示一个地点列表作为建议)。就像在这个例子中:google-developers.appspot.com/maps/documentation/javascript/… developers.google.com/maps/documentation/javascript/examples/… 一切都在那里。 您发布的代码对我有用(fiddle(有地图和没有地图)) 【参考方案1】:
    <script src="https://maps.googleapis.com/maps/api/js?key=[key-here]">you forgot to close the script tag</script>

这就是为什么它不起作用

编辑:自动完成,我刚刚拼凑的一些东西

googlePlaceSearch = function (qry, callback) 
    var placeSearch, autocomplete;
    var addressParts = 
        street_number: '',
        route: '',
        locality: '',
        administrative_area_level_1: '',
        country: '',
        postal_code: ''
    ;
    var componentForm = 
        street_number: 'short_name',
        route: 'long_name',
        locality: 'long_name',
        administrative_area_level_1: 'short_name',
        country: 'long_name',
        postal_code: 'short_name'
    ;
    var fillInAddress() 
        placeSearch.style.display = 'none';
        var place = autocomplete.getPlace();
        if (place) 
            place.address_components.forEach(function (comp) 
                var addressType = comp.types[0];
                if (componentForm[addressType]) 
                    addressParts[addressType] = comp[componentForm[addressType]];
                
            );
        
        callback(addressParts);
        google.maps.event.removeListener(autocomplete, 'place_changed', fillInAddress);
    
    autocomplete = new google.maps.places.Autocomplete((document.querySelector(qry)), 
        types: ['address']
    );
    google.maps.event.addListener(autocomplete, 'place_changed', fillInAddress);
;

开始使用

googlePlaceSearch("#address", someFn);

其中 #address 是一个 CSS 选择器,用于定位输入元素(在你的情况下很简单,就像我所说的那样,#address,但我把它放在一起是为了灵活),而 someFn 是一个接收 @ 的函数987654324@ 这样你就可以用返回的地址做你想做的事了

【讨论】:

糟糕!那是个错误。但我仍然需要自动完成功能。 哦,FFS - 我整理了一个通用的自动完成功能,同时你回答了你自己的问题:p【参考方案2】:

哦,我刚刚找到了解决方案:

<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]&libraries=places"></script>
<script>
var geocoder;
function initialize() 
  geocoder = new google.maps.Geocoder();

function codeAddress() 
  var input = document.getElementById("address");
  var autocomplete = new google.maps.places.Autocomplete(input);
  var address = document.getElementById("address").value;
  geocoder.geocode(  'address': address , function(r, s) 
    alert(r[0].geometry.location);
  );

</script>

和 HTML:

<body onload="initialize()">
  <input type="search" id="address">
  <input type="button" value="Submit" onclick="codeAddress()">
</body>

【讨论】:

以上是关于Google Maps Geocoding API(如何获取纬度/经度)的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Geocoding API - 使用 API 密钥拒绝请求

Google Maps Geocoding API 使用限制

Google Maps Geocoding API(如何获取纬度/经度)

使用 Google Maps JavaScript API v3 和 Geocoding API 映射多个位置

Google Maps (Reverse) Geocoding API 应该只显示 Cityname

Google Maps Geocoding APi 不返回 lat 和 long