Google 地图 API - 检测何时跨越州线并计算在每个州行驶的距离

问题描述 投票:0回答:4

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

我很确定我可以通过发送

DirectionsService
请求并迭代
response.routes[i].legs[i].steps[i].path
数组来做到这一点,但不幸的是,这需要对数千个
Geocoder
发送
LatLng
请求,这很快就超出了我的配额。有更好的方法来解决这个问题吗?我实际上只需要检测路线何时穿过州线并将其分成单独的路线,但我不知道如何在不迭代
path
数组的情况下做到这一点。

google-maps-api-3
4个回答
2
投票

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

当您超过配额时,您会得到什么样的反馈?如果是异常返回,您总是可以仅在收到配额推回时等待 3.5 秒。


1
投票

查看面板中的方向文字,看起来文字“Entering”出现在跨越州界的步骤中。
http://www.geocodezip.com/v3_example_geo2.asp?addr1=New%20York,NY&addr2=华盛顿,%20DC&geocode=1&geocode=2

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

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

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


1
投票

就我个人而言,我会使用 GeoNames 来完成类似的事情,而不是 Google。

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

我从来没有需要这样做,所以只能建议你在 Geonames 网站上查找说明。

原则上,您需要:

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

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

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

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

抱歉,我无法提供更多帮助,但这也许可以为您提供前进的道路。


0
投票

我面临着完全相同的问题,但我绝对没有你那么复杂来实现编码。我希望您能为我指明正确的方向,帮助我实现同样的目标。预先感谢您。

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