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



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

正如您所发现的,Google的地理编码服务不适用于集体请求。事实上,使用该服务进行批量下载或处理批处理请求是违反其服务条款的。

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

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

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

要克服这个问题,您可以寻找具有几个关键功能的 API:

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

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

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

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

最新更新