8

2 点間の方向を見つけて Google マップに表示し、サーバー側に保存して、必要に応じて再度レンダリングして、あるルートと別のルートを比較できるようにするアプリケーションを開発しています。Google マップ API Web サービスを使用してルートを見つけることに
成功しました。また、 Google マップ JavaScript v3を使用してルートを見つけ、 DirectionsRendererを使用してマップに表示しました。 これらのサービスは両方とも、JSON のプロパティの名前が異なるだけで、同様の JSON を返します (以下の例 1 を参照)。さらに重要なことに、JS API は呼び出しごとに異なる緯度/経度のプロパティ名を返します (以下の例 2 を参照)。


したがって、問題は、サーバー側の Web サービス呼び出しから取得した JSON を使用できず、それを javascripts DirectionRenderer クラスに直接渡してルートを表示できないことです。さらに、マップにルートを表示するたびに JS 呼び出しを行う必要があります。これにより、クォータが不要に使用されます。これを行うためのより良い方法はありますか。私は次の質問をしましたが、実際にはここここで答えを得ることができません

例 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
                            }
                        ],
                        .........
4

1 に答える 1

3

これを行うことができますが、いくつかの落とし穴があります。

まず、アプリが次のポイント 10.5.d に準拠していることを確認してください: https://developers.google.com/maps/terms#10-license-restrictions

一貫した名前のフィールドを持つ Directions API Web サービスからの JSON 応答とは異なり、JavaScript Directions サービスからの JSON 応答は解析する必要はありません。DirectionsResult代わりに、オブジェクトを含む JavaScript オブジェクトとしてオブジェクトにアクセスする必要がありますgoogle.maps.LatLngroutes[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 で表示するには、いくつかの方法があります。DirectionsResult私の好みは、JSON 応答をオブジェクトに「変換」することです。サーバーまたは JavaScript でこれを行うことができますが、前者の方が優れていると思います。

または、(JavaScript サービスを使用して) ルート サービスに再度クエリを実行して、ルートを再度取得することもできます。これにより、追加のクォータが消費されるだけでなく、別の (より最新の) ルートが返される場合もあります。それが良いか悪いかは、あなたが望むもの次第です。

于 2016-07-07T11:47:07.130 に答える