2

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

4

1 回答 1

1

如您所见,Google 的地理编码服务不适用于大量请求。事实上,使用该服务进行批量下载或处理批量请求是违反他们的服务条款的。

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

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

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

为了克服这个问题,您可以寻找具有一些关键功能的 API:

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

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

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

[这是 GitHub 上的一些示例 C# 代码]

于 2012-06-04T16:14:21.933 回答