我正在从一个XML文件中对多个地址进行地理编码,以获得在地图上绘制标记的纬度。大约15个地址时工作正常,但今天我检查了一下,有88个地址,加载页面需要一段时间。发生的情况是,用户点击地图页面的链接,浏览器只是旋转,直到所有的地址都被地理编码,然后页面加载。我不得不在每次调用google服务之前使用System.Threading.Thread.Sleep(150);来避免查询限制错误。有什么办法可以让这个加载页面然后加载地址吗?
正如你所发现的,谷歌的地理编码服务并不适合请求 一窝蜂. 事实上,这是违反他们 服务条款 来使用该服务进行批量下载或处理批量请求。
你应该寻找的是一个没有这么低限制的服务,并允许你向API提交批量请求。出于披露的目的,我为以下公司工作 SmartyStreets,我们提供了这样一个名为 美国街道地址API.
听起来你提交的请求和要进行地理编码和绘图的地址一样多。15-100个请求需要1到15秒的时间,包括网络延迟。在我的工作中,我见过不少次你的情况,这是一个合理的问题。
我建议的做法是让服务器将页面推送到客户端,然后让Javascript加载坐标并绘制点。(C.Evenhuis在他的评论中建议这样做。)虽然这样做会更早地加载页面,但它仍然应该旋转某种 "加载 "动画,这仍然会让用户等待。如果没有与Google的升级许可,你的限制将继续存在。
为了克服这个问题,你可以寻找一个具有几个关键功能的API。
你可以以美国街道地址API为例,看看它是否符合你的需求。它支持每个单次请求最多100个地址,所以你的等待时间从几秒到几毫秒。你下载的结果基本上可以无限期的存储,而且只会返回实际存在的地址的坐标,或者它会修正不完全正确的地址。如果你对它有什么疑问,请告诉我。
作为一个想法,即使你不想让客户端对地址进行地理编码,你的C#代码也可以这样做,并将所有的地址捆绑到一个请求中。