有没有办法进行批量地理编码(按地址获取lat/lon,反之亦然)?

Ole*_*ats 6 geocoding reverse-engineering google-geocoding-api

Google地理编码API有严重的限制(每天2,500个请求),我们总是会遇到限制错误.他们的营业执照花费10,000美元,对我们来说太贵了.
服务应与不同语言和不同国家合作.
服务应验证地址并返回lat/lng.地址可以是具有不同格式的字符串.

我们已准备好为此类服务付费,最好使用RESTful API.

Mat*_*att 5

我在SmartyStreets工作,你描述的是他们的核心领域.

您可能对LiveAddress感兴趣,它将地址转换为lat/lon,并且每秒可处理数千个请求.它跨地理分布在3个数据中心,并具有RESTful端点.你可以做高达100个请求的地址.如果您有Excel或CSV文件或类似的东西,还有一个列表处理版本.

最高价格标签是1万美元,但它为您提供一年无限查询.

一些示例代码位于https://github.com/smartystreets/LiveAddressSamples.

他们的许可协议没有限制您的使用限制.Dbaseman是对的:你得到限制错误,因为它违反了服务条款(除非你从他们那里获得营业执照,但即使这样,地址也是"最好的猜测" - 没有标准化和经过CASS认证的服务验证这是要记住的事情.


Cam*_*ron 5

你看过Nominatim吗?您可以通过OpenStreetMaps数据滚动自己,也可以向OpenStreetMapsMapQuest发送请求.可能的缺点包括CC许可证(需要归属,可能或可能不是您的问题)和验证问题(数据几乎完全是众包,因此确实会发生不准确).好处包括限制性较低的使用政策,频繁的更新,全球覆盖,当然,你不能打败价格.

https://jsfiddle.net/4hzzrws5/

var Data =[
{address: "17 rue de l'Abreuvoir. Nantilly. 28260 La Chaussée d'Ivry"},
{address: "52 rue Ernestine 95100 Argenteuil"},
{address: "3 allée Baudelaire 59139 Wattignies"},
{address: "165, Petit chemin d'aix   13320  Bouc Bel Air"},
{address: "54 avenue Yolande d'Aragon 49100 ANGERS"},
{address: "John Doe, Le Rouho Guidel 56520"},
{address: "51100"},
{address: "21 rue du Docteur Gallet - 74000 Annecy"},
{address: "4 Impasse des Cigales, 26500 Bourg lès Valence"},
{address: "83140 SIX FOURS LES PLAGES"},
{address: "35 cours Vitton 69006 Lyon"},
{address: "7 rue lallier 75009"},
{address: "Paul Michel, Villa Pétricciù,Ghjassu Pétricciù, 20221.CERVIONE"}
]

var cityAndCountry = function(res){
  var osmObj= res[0].address,
      city=osmObj.town || osmObj.city || osmObj.county || '',
      country=osmObj.country || '',
      iso2 =osmObj.country_code || '';
  var out = [ city, country, iso2];
  return out
}
var latAndLon = function(res){
  var lat= res[0].lat,
  		lon= res[0].lon;
  var out = [lat,lon];
  return out
}

var queryOsm = function(url) {
  $.getJSON(url, function (data) { 
    data.length==0? 
      console.log(["","",""],data)
    	:console.log(cityAndCountry(data),latAndLon(data),data);
  });
}

var delayedPing = function (i,data) {
  // console.log(i, data.length)
  var d = data[data.length-i];
  if(d.address){ 
  	// placeAddressOnMap(gc, d.address, d.service||"", d.customer||"")
    var url = 'https://nominatim.openstreetmap.org/search/'+d.address+'?format=json&addressdetails=1&limit=1';
    queryOsm(url)
  } else { console.log(["","","",d.address]) }
  var delay = 1000+200*Math.random();
  if (--i > 0) { setTimeout(function () { delayedPing(i,data); }, delay); }
}

delayedPing(Data.length,Data);
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


McG*_*gle 1

不,没有,如果您查看他们的许可,就会发现它明确旨在阻止您这样使用他们的服务。基本上,你只能在以下情况下使用它:

  1. 最终用户向 API 发起每个请求,并且
  2. 您的服务是免费的。

他们还禁止您将其服务结果保存/缓存到数据库中。谷歌使用他们的工具可以很容易地进行原型设计,但是一旦你开始扩大规模,你就需要付费(在这方面与 M$ 没有太大不同)。