【问题标题】:Storing complete Google Maps route存储完整的谷歌地图路线
【发布时间】:2012-02-15 15:43:17
【问题描述】:

我希望能够在 Google 地图上轻松存储和重新显示 Google 地图路线。假设从 A 点到 B 点,来自 Google 的 DirectionsResult 对象沿路线有 100 个点,我希望能够存储这条路线并保证下次绘制它时,方向将经过所有这些点。

我看到人们尝试这样做的方式是序列化整个 DirectionsResult 对象并将其存储在数据库中。然后,当我们想重绘路线时,将字符串发送回来,JSON.Parse 它,然后尝试将其提供给DirectionsRenderer 对象,该对象将在地图上呈现方向。这种方法存在三个问题:

1) 在序列化过程中您会丢失类型信息,并且由于 Google 会缩小对象,因此您无法使用类函数可靠地从对象中获取这些值。您需要在最初序列化对象时首先使用数据访问器函数构建“占位符”对象,然后在稍后解析序列化字符串时重建 Google 地图对象。

2) 这在法律上是可疑的。谷歌地图服务条款说你不应该永久存储数据,从其他帖子看来,这种方法违反了它。

3) 对象可能很大,我序列化的一个路由超过 64KB。

我还考虑尝试存储路径中的一些点,然后使用 Waypoints 重建它。这种工作,但免费 API 最多只能有 8 分,所以这不能保证超过这 8 分的准确性。此外,它会沿着路线绘制航路点标记,我认为这可能会让用户感到困惑。

是否有一种可接受的方式来存储来自 Google 地图的准确路线,或者 API 和 TOS 是否专门设计用于防止这种情况?感谢您的帮助。

【问题讨论】:

  • 我们是这样解决的:我把“encoded_polyline”字段发送到我们的后端。如果我需要在后端处理点,我使用了我在网上找到的谷歌折线解码算法的一个版本并移植到 ruby​​(或您使用的任何语言)。这是我找到的python version。如果您需要在前端显示折线,请将折线发送到前端并使用Google Geometry Tool 对其进行解码。
  • 当然,这样做的缺点是它只将路线显示为折线,所以如果你想要有航点,你也必须存储它们。而且,如果您想让路线可编辑,那么您就不走运了,您只需要请求一组新的路线即可。
  • 如果您有带有航点的标记,那么您可以将waypoints list(或markers list 与start-end 点)顺序存储到database 中,然后在需要时使用相同的序列并通过起点和终点传递给方向渲染。它将在地图上再次绘制路线。

标签: javascript google-maps serialization google-maps-api-3


【解决方案1】:

我认为这在法律上是可疑的。事实上,它几乎肯定违反了Terms of Service。正如您所指出的,它是用于提高性能以外的目的的永久存储(与 10.1.3(b) 相反);但它也旨在显示方向而不通过 API 获取它们(与 10.1.1(a) 相反)。谷歌没有让它变得容易的事实意味着他们没有授权这个用例。事实上,TOS 和 API 旨在使这样的存储即使不是不可能也很困难。

存储起点和终点,当你想再次显示时让API计算出路线是不是不能接受?

【讨论】:

  • 感谢您的回复安德鲁。我同意你的看法。您提供的解决方案在大多数情况下是一个很好的解决方案,但我们需要确保 Google Maps DirectionsRenderer 创建的路线在该路线的整个生命周期中通常是相同的。无法保证 DirectionsRenderer 绘制的最短路径有一天会选择一条新高速公路(特别是因为我们在中国开展业务,而且新高速公路如雨后春笋般涌现是现实)。
  • 我们正在考虑一种解决方案,我们将来自 DirectionsResult 的encoded_polyline 存储起来,然后将其传递到前端以使用 Google 自己的解码算法进行绘制。如果我们需要在后端解码路径,我们使用我们移植到 ruby​​ 的解码器版本。我们有一个工作原型,但一直犹豫部署它,因为它在法律上是可疑的(尤其是与你提到的 10.1.1(a) 相反。)
【解决方案2】:

看看www.mapmyrun.com,他们正在使用谷歌地图 api,他们肯定在保存数据。但是,他们不太可能使用免费的 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2014-08-14
    • 2012-12-08
    • 2011-07-22
    相关资源
    最近更新 更多