0

ManagedBean から jsf ページへのGoogle マップ JavaScript 方向 APIにウェイポイントを渡す必要があります。JSONArray を作成して jsf に渡そうとしています:

private JSONArray routesJSON;

ゲッターとセッターで。

JSONを作成するよりも:ループ内でウェイポイントのLatLangを使用して文字列を追加しますList<String>

routes.add("new google.maps.LatLng(" + o.getLatitude() + "," + o.getLongitude()+")");

そして、JSONを取得しています:

[{"location":"new google.maps.LatLng(50.495121,22.1705)"},{"location":"new google.maps.LatLng(50.57082,22.06813)"},{"location":"new google.maps.LatLng(50.570549,22.047871)"},{"location":"new google.maps.LatLng(50.521389,21.912695)"},{"location":"new google.maps.LatLng(50.495121,22.1705)"}]

から:

for()
array.put(obj);
}
System.out.println(array);

ルートを表示するためのJSF関数内:(ハードコードされたデータで動作します)

function calcRoute() {

              var waypts = [];                 
              var start = new google.maps.LatLng(#{someBean.startLatitude}, #{someBean.startLongitude});            
              var end = new google.maps.LatLng(49.712112, 21.50667);
              var way = #{someBean.routesJSON};
              var request = {
              origin:start,
              destination:end,
              optimizeWaypoints: true,                        
              waypoints:way;         
              travelMode: google.maps.TravelMode.DRIVING
              };
              directionsService.route(request, function(result, status) {
                if (status == google.maps.DirectionsStatus.OK) {
                  directionsDisplay.setDirections(result);
                }
              });
            }

しかし、そのページマップを表示しているときに表示されません。おそらく"JSONが原因であることはわかっていますが、削除する方法がわかりません。または、ウェイポイント データを Bean から jsf ページに渡す最も簡単な方法はありますか?

4

1 に答える 1

1

「new google.maps.LatLng(50.495121,22.1705)」のような JavaScript ステートメントを含む JSON データ パケットを返す代わりに、座標だけを返す方が賢明です。

したがって、JavaScript に次のような JSON パケットがある場合 (Java と Javascript の間でデータを渡す方法がわかりません):

var routes = [
  {"lat":"50.495121", "lng":"22.1705"},
  {"lat":"50.57082", "lng":"22.06813"},
  {"lat":"50.570549", "lng":"22.047871"},
  {"lat":"50.521389", "lng":"21.912695"},
  {"lat":"50.495121", "lng":"22.1705"}
]

これを次のように配列に変換できます。

var way = [];
for (var i = 0; i < routes.length; i++) {
  way.push(new google.maps.LatLng(parseFloat(routes[i].lat), parseFloat(routes[i].lng)));
}

注意: "50.495121" のような文字列を浮動小数点数に変換するための parseFloat の使用。

于 2013-11-05T14:39:05.750 に答える