5

我正在使用谷歌地图 api 来计算我公司的车辆在一段时间内在每个州行驶的里程数。对于在此期间进行的旅行,用户将在地图上创建路线,程序应该能够生成一些输出,例如:“马里兰州:100 英里,弗吉尼亚州:500 英里”等。

我很确定我可以通过发送DirectionsService请求并遍历response.routes[i].legs[i].steps[i].path数组来做到这一点,但不幸的是,这需要Geocoder在数千个LatLngs 上发送请求,这很快使我超出了我的配额。有没有更好的方法来解决这个问题?我真的只需要检测路线何时越过状态线并将其分解为单独的路线,但我不知道如果不遍历path数组我将如何做到这一点。

4

3 回答 3

2

如果您的路径数组中有 1000 个元素并且您正在进行二进制搜索(而不是迭代),则只需 12 次调用 LatLng 即可确定路径越过边界的位置。

当你超过配额时,你会得到什么样的反馈?如果是异常返回,则只有在收到配额推送时,您才能始终等待 3.5 秒。

于 2013-07-19T21:40:05.017 回答
1

查看面板中的方向文本,看起来文本“正在输入”出现在跨州边界的步骤中。
http://www.geocodezip.com/v3_example_geo2.asp?addr1=New%20York,NY&addr2=Washington,%20DC&geocode=1&geocode=2

  • 进入新泽西
  • 进入特拉华州
  • 进入马里兰
  • 进入哥伦比亚特区

(这没有记录,所以可能会停止工作)

您还可以找到方向折线与一组状态多边形的交点。

于 2013-07-15T18:12:10.683 回答
1

就个人而言,我会使用GeoNames 来做类似的事情,而不是谷歌。

使用 Geonames,您很可能会遇到与 Google 一样的配额问题,但是,有很大的不同... Geonames 允许您下载各种数据集,以便您可以提供自己的自托管地理服务... sans配额

我从来不需要这样做,所以只能建议你在 Geonames 网站上四处寻找指导。

原则上,您需要:

  • 下载 US.zip 数据集并安装在服务器上(或用于开发的本地主机)
  • 编写一个专门的(RESTful)Web 服务(例如在 PHP 中),它执行所有跨州线的计算,并返回一个 JSON 编码的每个州的里程列表。

通过在服务器端进行数学运算并返回捆绑的结果,您只需发出一个 HTTP 请求(每辆公司车辆)。

当然,服务器将需要适当的 lat/lng 路径数据,但根据您在问题中所说的,这已经是服务器端的,因此无需将其下载到客户端只是为了在请求中重新发送。

有趣的项目。从一开始,您就需要考虑您的测试/验证策略。

抱歉,我无法提供更多帮助,但也许这会给你一条前进的道路。

于 2013-07-15T20:49:10.700 回答