【发布时间】: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