使用 Google Geocoding API(或类似的)实现地址查找 [关闭]

Posted

技术标签:

【中文标题】使用 Google Geocoding API(或类似的)实现地址查找 [关闭]【英文标题】:Implementing an address lookup with Google Geocoding API (or similar) [closed] 【发布时间】:2010-12-08 18:23:10 【问题描述】:

我想在我的网站上添加一项功能,客户可以在其中输入他们的邮政编码,然后它会自动使用 Google 地理编码或开源/必应等效项查找他们的地址。

有没有人有任何示例代码或知道我可以在哪里执行此操作的好指南?

如果使用 jQuery 更好:)

在此先感谢

达伦

【问题讨论】:

【参考方案1】:

使用 jQuery 的 getJSON 和 google 的 API - http://codepen.io/seanjacob/pen/wfcHB

$('#submit').click(function()  

  //Get Postcode
  var number = $('#number').val();
  var postcode = $('#postcode').val().toUpperCase();;

  //Get latitude & longitude
  $.getJSON('https://maps.googleapis.com/maps/api/geocode/json?address=' + postcode + '&key=[[YOUR_API_KEY]]', function(data) 

    var lat = data.results[0].geometry.location.lat;
    var lng = data.results[0].geometry.location.lng;

    //Get address    
    $.getJSON('https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' + lng + '&key=[[YOUR_API_KEY]]', function(data)               
      var address = data.results[0].address_components;              
      var street = address[1].long_name;
      var town = address[2].long_name;
      var county = address[3].long_name;                        

      //Insert
      $('#text').text(number + ', ' + street + ', ' + town + ', ' + county + ', ' + postcode);

    );
  );
);

除非您使用的是 Google Maps API for Business,否则您每天最多只能收到 2,500 个地理位置请求。由于此脚本每次运行发出两个请求,因此每天要查找 1,250 个邮政编码。

【讨论】:

已修复,添加了我自己的codepen的链接,我不会删除 顺便说一句,我让你的代码更简单codepen.io/aamirafridi/pen/VeppRo 无需再次调用谷歌 API 您有“每天 2,500 次地理定位请求”声明的链接吗? 不错! developers.google.com/maps/documentation/geocoding/usage-limits @AamirAfridi 不幸的是,您的代码不太准确。示例:35 号,邮编:HU8 8QP【参考方案2】:

我现在实际上正在开发一个使用 GeoCoding 的 Google Maps 应用程序......这是我的第一个,所以我一直非常依赖 Google Maps API。以下是帮助您入门的链接:

http://code.google.com/apis/maps/documentation/javascript/basics.html - 一般 API 的基本起点。

在左侧栏中查看教程、地理编码(或在教程中途点击地理编码链接)和代码示例。

所有这些都让我到达了我需要开始的地方。

祝你好运!

莱兰多

【讨论】:

code.google.com/apis/maps/documentation/javascript/… - 教程 code.google.com/apis/maps/documentation/javascript/… - 地理编码页面 code.google.com/apis/maps/documentation/javascript/examples/… - 代码示例【参考方案3】:

感谢 seanjacob 的回答让我更深入地研究。 address_components 中返回的结果并不总是相同的类型,即索引 1 并不总是包含街道名称,因此最好检查 address_components[n].types[0] 中返回的值以确定它的地址字段的类型包含。

还请注意,您现在应该使用 https 调用 Google 的 API,并且您需要指定您的 API 密钥。

这是脚本:

function getAddress() 
//Get Postcode
var number = $('#HouseNumber').val();
var postcode = $('#PostCode').val().toUpperCase();;
var address_1 = '';
var address_2 = '';
var town = '';
var county = '';
var pcode = '';
var region = '';
var country = '';
//Get Address
$.getJSON('https://maps.googleapis.com/maps/api/geocode/json?address=' + postcode + '&sensor=false&key=[YOUR API KEY IN HERE]', function (data) 

    // Format/Find Address Fields
    var address = data.results[0].address_components;
    // Loop through each of the address components to set the correct address field
    $.each(address, function () 
        var address_type = this.types[0];
        switch (address_type) 
            case 'route':
                address_1 = number + ' ' + this.long_name;
                break;
            case 'locality':
                address_2 = this.long_name;
                break;
            case 'postal_town':
                town = this.long_name;
                break;
            case 'administrative_area_level_2':
                county = this.long_name;
                break;
            case 'administrative_area_level_1':
                region = this.long_name;
                break;
            case 'country':
                country = this.long_name;
                break;
        
    );
    // Sometimes the county is set to the postal town so set to empty if that is the case
    if (county === town) 
        county = '';
    
    // Display the results
    $('#address_1').text(address_1);
    $('#address_2').text(address_2);
    $('#town').text(town);
    $('#county').text(county);
    $('#postcode').text(postcode);
    $('#region').text(region);
    $('#country').text(country);
);

这里是调用函​​数的页面

<div class="form-horizontal">
<div class="form-group">
    <div class="col-md-2 control-label"><label for="HouseNumber">House No.</label></div>
    <div class="col-md-10">
        <input type="text" id="HouseNumber" name="HouseNumber" />
    </div>
</div>
<div class="form-group">
    <div class="col-md-2 control-label"><label for="PostCode">Post Code</label></div>
    <div class="col-md-10">
        <input type="text" id="PostCode" name="PostCode" />
    </div>
</div>
<div class="form-group">
    <div class="row">
        <div class="col-md-4 acc-centre">&nbsp;</div>
        <div class="col-md-4 acc-centre"><input type="button" class="btn btn-primary btn-lg" value="Lookup" onclick="getAddress()"></div>
        <div class="col-md-4 acc-centre">&nbsp;</div>
    </div>
    <div class="row">
        <div class="col-md-12 acc-centre">
            <span id="address_1"></span><br />
            <span id="address_2"></span><br />
            <span id="town"></span><br />
            <span id="county"></span><br />
            <span id="postcode"></span><br />
            <span id="region"></span><br />
            <span id="country"></span><br />
        </div>
    </div>
</div>

【讨论】:

以上是关于使用 Google Geocoding API(或类似的)实现地址查找 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Google Geocoding API 返回错误的语言作为响应

Google Maps Geocoding API 使用限制

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

在哪里放置 Google Geocoding API 的 API 密钥?

Google Geocoding API 返回错误的地址,但 Google 地图显示正确的位置

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