有没有办法进行批量地理编码(通过地址获取纬度/经度,反之亦然)? [关闭]

Posted

技术标签:

【中文标题】有没有办法进行批量地理编码(通过地址获取纬度/经度,反之亦然)? [关闭]【英文标题】:Is there way to do batch geocoding (get lat/lon by address and vice-versa)? [closed] 【发布时间】:2012-04-15 04:38:32 【问题描述】:

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

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

【问题讨论】:

另一个服务batchgeo.com 你能澄清一下吗?您在寻找美国地址吗?是否正在尝试验证地址是否存在,然后对其进行地理编码?或者您只是想找出如果要退出的地址“会”在哪里(地址近似值)。 @Jeffrey 我有一点更新。你还对什么感兴趣? 【参考方案1】:

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

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

最高的price tag 是 1 万美元,但它可以让您在一年内无限次查找。

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

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

【讨论】:

我应该明确指定国家、城市、地址作为请求参数吗? SmartyStreets 能像谷歌一样解析不同的格式和语言吗?例如'Львів, вул。 Вірменська, 35' 目前我们只支持美国地址(无论它们是什么语言)。要进行处理,请求必须包含 街道地址city/state/zip这三个的任意组合)。如果您不能将它们分开,那么 一种方法来处理地址,而无需分开不同的部分。 The algorithm for that is described here。请记住,虽然 Google 更灵活,但其目的却大不相同:近似地址,而不是验证地址。 更新:这里有点延迟,但您不再需要手动分隔单行地址的各个部分。 LiveAddress 为您完成。 SmartyStreets 是否支持反向地理编码(即经纬度 --> 街道地址)? @***user2010 目前,我们只是从地址进行转发地理编码。【参考方案2】:

你看过Nominatim吗?您可以自己滚动OpenStreetMaps 数据,也可以向OpenStreetMaps 或MapQuest 发送请求。可能的缺点包括 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>

【讨论】:

【参考方案3】:

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

的情况下使用它
    最终用户向 API 发起每个请求,并且 您的服务是免费的。

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

【讨论】:

【参考方案4】:

以下选项可能适合您

    GeoNames Gisgraphy GeoCoder

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

【讨论】:

【参考方案5】:

just try this YUI

使用限制

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

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

ZIP / Postal Code + Country to Geo Coordinates

【讨论】:

以上是关于有没有办法进行批量地理编码(通过地址获取纬度/经度,反之亦然)? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何实现地理位置与经纬度坐标的批量转换

从地理编码纬度和经度获取地址

使用 iPhone 的纬度和经度进行反向地理编码

python中的地理编码使用API​​密钥从地址获取纬度和经度

使用前向地理编码获取iOS中许多地址的纬度和经度时如何添加延迟?

绘制按钮以将纬度和经度添加到输入字段?地理编码