google-maps - 在不使用 javascript api 的情况下显示谷歌方向网络服务的结果

标签 google-maps google-maps-api-3 map-directions

我正在开发一个应用程序,它将在 2 点之间找到方向,将其显示在谷歌地图上并将其存储在服务器端,以便我可以在需要时再次渲染它,并将一条路线与另一条路线进行比较。
我已经成功使用了google maps api web serivce找到路线,我也使用了google maps javascript v3使用 DirectionsRenderer 查找路线并将其显示在 map 上.
这两个服务都返回相似的 JSON,但 JSON 的属性名称不同(参见下面的示例 1)。更重要的是,JS api 从一个调用到另一个调用返回不同的 lat/lng 属性名称(参见下面的示例 2)。
所以问题是我不能使用从服务器端 Web 服务调用获得的 JSON 并将其直接传递给 javascripts DirectionRenderer 类来显示路由。此外,每次在 map 上显示路线时,我都必须进行 JS 调用。这将导致不必要地使用我的配额。有没有更好的方法来做到这一点。我已经解决了以下问题,但我实际上无法得到答案 herehere

示例 1:

网络服务调用结果:

{
    "routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 12.9198217,
               "lng" : 77.6124895
            },
            "southwest" : {
               "lat" : 12.912811,
               "lng" : 77.60924989999999
            }
         },
          .....

这没有“路径”属性。

Javascript V3 调用结果:
{
"routes": [
    {
        "bounds": {
            "ta": {
                "d": 12.91281,
                "b": 12.919820000000001
            },
            "ga": {
                "b": 77.60925,
                "d": 77.61249000000001
            }
        },
        ......
        "path": [
                            {
                                "d": 12.913920000000001,
                                "e": 77.60928000000001
                            },
                            {
                                "d": 12.913960000000001,
                                "e": 77.60958000000001
                            },
                            {
                                "d": 12.91398,
                                "e": 77.61
                            }
                        ],
                        ..........

示例 2:
另一个 Javascript V3 调用结果:
{
"routes": [
    {
        "bounds": {
            "Aa": {
                "k": 12.91281,
                "j": 12.919820000000001
            },
            "qa": {
                "j": 77.60925,
                "k": 77.61249000000001
            }
        },
        .....
        "path": [
                            {
                                "k": 12.91281,
                                "A": 77.60925
                            },
                            {
                                "k": 12.913920000000001,
                                "A": 77.60928000000001
                            }
                        ],
                        .........

最佳答案

你可以这样做,但有几个问题。

首先,确保您的应用符合此处的第 10.5.d 点:
https://developers.google.com/maps/terms#10-license-restrictions

与来自 Directions API Web 服务的 JSON 响应具有一致的命名字段不同,来自 JavaScript Directions 服务的 JSON 响应不是供您解析的。相反,您需要访问 DirectionsResult对象作为 JavaScript 对象,其中包含 google.maps.LatLng对象,例如routes[0].legs[0].steps[0].start_location
https://developers.google.com/maps/documentation/javascript/directions#DirectionsResults
https://developers.google.com/maps/documentation/javascript/directions#Steps

对于您从 Directions API Web 服务获得的路线,有多种方法可以在 JavaScript API 上显示它。我的偏好是将 JSON 响应“翻译”成 DirectionsResult目的。您可以在您的服务器或 JavaScript 中执行此操作,但我认为前者更好。

或者,您可以重新查询路线服务(使用 JavaScript 服务)以再次获取路线。这不仅会消耗额外的配额,还可能返回不同的(更新的)路由。这是好是坏,这取决于你想要什么。

关于google-maps - 在不使用 javascript api 的情况下显示谷歌方向网络服务的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450061/

相关文章:

android - Google Maps API 版本差异

javascript - 点击链接时谷歌地图平移到中心

google-maps-api-3 - Google Maps API - route 点

android - 如何在外部 Google map 应用程序中加载 Android Direction API 结果?

javascript - 拆分过大的路径时,Google Maps Elevation Service 响应不准确

java - 瓦片不会随 map View 加载,但会随 fragment 加载

c# - Mono for Android 完整版错误编译 Google Maps Library

android - fragment 中的映射 fragment

Android - 如何在谷歌地图上显示确切位置?

调用 Android Phonegap : Google Map marker not immediately removed when marker. setMap(null)