多地址地理编码背后的代码

问题描述 投票:1回答:1

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

c# geocoding
1个回答
2
投票

正如你所发现的,谷歌的地理编码服务并不适合请求 一窝蜂. 事实上,这是违反他们 服务条款 来使用该服务进行批量下载或处理批量请求。

你应该寻找的是一个没有这么低限制的服务,并允许你向API提交批量请求。出于披露的目的,我为以下公司工作 SmartyStreets,我们提供了这样一个名为 美国街道地址API.

听起来你提交的请求和要进行地理编码和绘图的地址一样多。15-100个请求需要1到15秒的时间,包括网络延迟。在我的工作中,我见过不少次你的情况,这是一个合理的问题。

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

为了克服这个问题,你可以寻找一个具有几个关键功能的API。

  • 地理分布式。这可以减少网络延迟,提高性能。
  • 允许你执行批量请求或地理编码的服务条款。一窝蜂
  • 支持每次请求的多个地址,这意味着您只需在每次页面加载时提交一个或两个请求,即使是多达100或200个地址。
  • 最好是在绘制地址之前,有办法验证地址是否存在。Google只是近似地计算地址,并不验证它们。
  • 允许缓存的值不仅仅是暂时的时间,以优化你的脚本。Google的TOS不会让你存储结果,除非只是暂时的,以便在运行时优化性能。

你可以以美国街道地址API为例,看看它是否符合你的需求。它支持每个单次请求最多100个地址,所以你的等待时间从几秒到几毫秒。你下载的结果基本上可以无限期的存储,而且只会返回实际存在的地址的坐标,或者它会修正不完全正确的地址。如果你对它有什么疑问,请告诉我。

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

[下面是GitHub上的一些C#代码示例。]

© www.soinside.com 2019 - 2024. All rights reserved.