google-maps – 显示谷歌方向网络服务的结果,而不使用javascript api

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

例1:

Web服务呼叫结果:

{
    "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对象,例如路线[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网络服务获得的路线,有几种方法可以在JavaScript API上显示它.我的偏好是将JSON响应“转换”为DirectionsResult对象.您可以在服务器上或JavaScript中执行此操作,但我认为前者更好.

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

转载注明原文:google-maps – 显示谷歌方向网络服务的结果,而不使用javascript api - 代码日志