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

时间:2012-04-01 00:15:29

标签: geocoding reverse-engineering google-geocoding-api

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

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

5 个答案:

答案 0 :(得分:5)

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

您可能对LiveAddress感兴趣,它将地址转换为lat / lon和can process thousands of requests per second。它跨地理分布在3个数据中心,并具有RESTful端点。你可以up to 100 addresses per request。如果你有一个Excel或CSV文件或类似的东西,还有一个列表处理版本。

最高price tag是1万美元,但它为您提供一年无限查询。

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

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

答案 1 :(得分: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);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:1)

不,没有,如果您查看他们的许可,它明确旨在阻止您使用他们的服务。基本上,如果

,您只能使用它
  1. 最终用户发起对API的每个请求,
  2. 您的服务是免费的。
  3. 它们还禁止您将其服务结果保存/缓存到数据库。谷歌可以很容易地使用他们的工具进行原型设计,但是一旦你开始扩大规模,你就会付钱(在这方面与M $没那么不同)。

答案 3 :(得分:0)

以下选项可能适合您

  1. GeoNames
  2. Gisgraphy
  3. GeoCoder
  4. 我直接与Google就Google地图授权问题进行了沟通。不幸的是,他们并没有意识到由于成本原因导致的市场份额大幅下降。

答案 4 :(得分:0)

just try this YUI

使用限制

每个应用程序限制(由您的访问密钥标识):每天100,000次呼叫

每IP限制:/ v1 / public /:每小时1,000次通话; / v1 / yql /:每小时10,000次呼叫

ZIP / Postal Code + Country to Geo Coordinates