7

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

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

4

5 回答 5

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>

于 2012-04-16T06:32:44.910 回答
5

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

您可能对 LiveAddress 感兴趣,它将地址转换为纬度/经度并且每秒可以处理数千个请求。它地理分布在 3 个数据中心,并具有 RESTful 端点。每个请求最多可以处理 100 个地址。如果您有 Excel 或 CSV 文件或类似文件,还有一个列表处理版本。

最高价格为 10,000 美元,但它可以为您提供一年无限制的查询。

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

他们的许可协议没有限制您的使用的限制。Dbaseman 是对的:您会遇到限制错误,因为它违反了 TOS(除非您从他们那里获得了营业执照,但即便如此,地址也是“最佳猜测”——没有像 CASS 认证服务那样标准化和验证. 这是要记住的事情)。

于 2012-04-01T02:25:16.300 回答
1

不,没有,如果您查看他们的许可,它明确旨在防止您像那样使用他们的服务。基本上,您只打算在以下情况下使用它

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

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

于 2012-04-01T00:56:04.013 回答
0

试试这个 YUI

使用限制

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

每个 IP 限制:/v1/public/:每小时 1,000 个呼叫;/v1/yql/:每小时 10,000 次调用

邮政编码 + 国家/地区到地理坐标

于 2012-04-16T09:24:30.530 回答
0

以下选项可能适合您

  1. 地名
  2. 地理信息学
  3. 地理编码器

我直接与谷歌就谷歌地图许可问题进行了沟通。不幸的是,他们没有意识到由于成本而失去了巨大的市场份额。

于 2012-04-16T08:49:25.727 回答