对多个地址代码进行地理编码

时间:2012-06-04 14:08:24

标签: c# geocoding

我正在从XML文件对多个地址进行地理编码,以使lat / lng在地图上绘制标记。它适用于大约15个地址,但今天我检查了88个地址,加载页面需要一段时间。发生了什么事情是用户点击地图页面的链接,浏览器只是旋转,直到所有地址都被地理编码,然后页面加载。我不得不使用System.Threading.Thread.Sleep(150);每次调用google服务之前都要避免查询限制错误。我可以做些什么来加载页面然后加载地址?

1 个答案:

答案 0 :(得分:1)

正如您所发现的那样,Google的地理编码服务不适用于 en masse 的请求。实际上,使用该服务进行批量下载或处理批量请求是违反他们terms of service的。

您应该寻找的服务是没有这么低限制的服务,并允许您向API提交批处理请求。出于披露目的,我为SmartyStreets工作,我们提供了一个名为LiveAddress的API。

听起来你提交的请求和地理编码和绘图的地址一样多。 15-100个请求将需要1到10秒或15秒,包括网络延迟。我已经在我的工作中看到了你的情况很多次,这是一个合理的问题。

我建议做的是让服务器将页面下推到客户端,然后让Javascript加载坐标并绘制点。 (C.Evenhuis在他的评论中提出这一点。)虽然这会加载页面,但它仍然应该旋转某种“加载”动画,这仍然会让用户等待。如果没有Google的升级许可,您的限制将保留。

要解决此问题,您可以查找具有以下几个关键功能的API:

  • 地理分布。这可以减少网络延迟并提高性能。
  • 允许您执行批量请求或地理编码整体的服务条款
  • 每个请求支持多个地址,这意味着您每页只需提交一个或两个请求,即使是最多100或200个地址
  • 优选地,在绘制地址之前甚至存在验证地址的方法。 Google会近似地址,但不会对其进行验证。
  • 缓存/存储值的权限超过一段临时时间来优化脚本。 Google的TOS不允许您存储结果,只是暂时存储以优化运行时的性能。

您可以使用LiveAddress作为查找内容的示例,并查看它是否符合您的需求。它支持每个请求最多100个地址,因此您的等待时间从几秒到几毫秒。您可以基本上无限期地存储下载的结果,并且只返回实际存在的地址的坐标,或者它将修复不太正确的地址。如果您对此有任何疑问,请与我们联系。

考虑一下,即使您不希望客户端对地址进行地理编码,您的C#代码也可以执行此操作并将所有地址捆绑到一个请求中。

[Here's some sample C# code on GitHub]