【问题标题】:Google Maps API - detect when crossing state lines and calculate distance travelled in each stateGoogle Maps API - 检测何时穿越州界线并计算每个州的行驶距离
【发布时间】:2013-07-15 17:55:18
【问题描述】:

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

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

【问题讨论】:

  • 如果你的路径数组中有 1000 个元素并且你是二分搜索(而不是迭代),它应该只需要 12 次调用 LatLng 来确定路径跨越边界的位置。您是否正在寻找一种解决方案,该解决方案涉及最大限度地减少您必须检查的路径数组中的项目数量,或者您是否正在寻找一种在 API 中为您找到边界的解决方案?
  • 一个简单的测试路由生成了900多个LatLng对象,服务器只响应了4个请求。一条经过多个州的路线很容易产生数以万计的LatLng;我认为没有任何方法可以充分减少请求负载。
  • 实际上,我可以通过将您的二分搜索建议与 3.5 秒超时(永恒,但我会立即采取我能得到的)相结合来使其工作。将其发布为答案,我会接受。

标签: google-maps-api-3


【解决方案1】:

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

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

【讨论】:

  • 这是一个异常返回,但配额很快且频繁地达到,因此我更愿意将查询间隔开以实现稳定、一致的流程。我已将延迟减少到 3 秒,当达到配额时会额外超时 3 秒,然后再试一次。与我尝试过的其他时间组合相比,这是最可以忍受的。但是你的二分搜索建议很关键——就像一个魅力。谢谢!
【解决方案2】:

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

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

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

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

【讨论】:

  • 既然你提到它,状态多边形可能是要走的路。但是,它们的设置会很繁琐,因此同时我必须让用户手动放置一个航路点,使路线与州线相交。
【解决方案3】:

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

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

我从来不需要这样做,所以只能建议您在 Geonames 网站上四处翻找说明。

原则上,您需要:

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

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

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

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

很抱歉,我无法提供更多帮助,但也许这会给您带来前进的道路。

【讨论】:

  • @Beetroot-Beetroot 你能给我们举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多