Google Maps API - 检测何时越过状态行并计算每个州的行进距离

时间:2013-07-15 17:55:18

标签: google-maps-api-3

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

我非常确定我可以通过发送DirectionsService请求并迭代response.routes[i].legs[i].steps[i].path数组来实现此目的,但不幸的是,这需要向数千Geocoder发送LatLng个请求这很快就让我超过了我的配额。有没有更好的方法来解决这个问题?我真的只需要检测路由何时越过状态行并将其分解为单独的路由,但我不知道如果不迭代path数组,我将如何做到这一点。

3 个答案:

答案 0 :(得分:1)

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

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

(这没有记录,因此可能会停止工作)

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

答案 1 :(得分:1)

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

使用Geonames,您很可能遇到配额问题,但是,有一个很大的区别...... Geonames允许您下载各种数据集,以便您可以提供自己的自托管地理服务。 .. 没有配额

我从来不需要这样做所以只能建议你在Geonames网站上翻找指示。

原则上,您需要:

  • 下载US.zip数据集并在服务器(或localhost for development)上安装
  • 编写一个专门的(RESTful)Web服务(例如,在PHP中),它执行所有状态行交叉计算并返回每个州的JSON编码的里程列表。

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

当然,服务器将需要相应的lat / lng路径数据,但是你在问题中说的那个,那已经是服务器端,所以不需要将它下载到客户端只是为了在请求中重新发送。

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

对不起,我无法提供更多帮助,但也许这会让你前进。

答案 2 :(得分:1)

如果你的路径数组中有1000个元素并且你是二进制搜索(而不是迭代),它应该只需要12次调用LatLng来确定路径穿过边界的位置。

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