Невозможно десериализовать объект DirectionsResult GoogleMaps

Я использую API GoogleMaps v3. 0 и пытается сохранить DirectionsResult в моей базе данных, а затем получить его позже для использования на карте. Моя проблема в том, что когда я пытаюсь повторно гидратировать сохраненный объект, извлекая его JSON-представление из моей базы данных, это просто тупой JSON, у него нет исходных методов и функций составляющих его объектов. Итак, я создал процедуру исправления, которая берет тупой текст JSON и перестраивает его, реконструируя все объекты LatLng и LatLngBound. Но чего-то по-прежнему не хватает, потому что мой фиксированный объект работает не так, как оригинал, две точки отображаются на моей карте, но фиолетовая линия между ними отсутствует.

Буду признателен за любой совет по лучшему способу сериализации / гидратация или какие-либо идеи относительно того, что может отсутствовать в моей программе исправления.

Спасибо

alt text alt text

request = {
   origin: homeLocation, 
   destination: jobLocation,
   travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
   if (status == google.maps.DirectionsStatus.OK) {
      var str = Ext.encode(response);  //<<==SAVING RAW JSON OBJECT TO DB (I USE ExtJs)
      var z = eval('(' + str + ')');   //<<==REHYDRATING DirectionsResult RAW JSON OBJECT
      FixDirectionResult(z);           //<<==ATTEMPT TO RE-ESTABLISH ORIGINAL OBJECTS
      directionsRenderer.setDirections(z);  //<<==THIS WORKS WITH response BUT NOT WITH z
   }
);
function FixDirectionResult(rslt) {
 for(r=0; r<rslt.routes.length; r++) {
  var route = rslt.routes[r];
  var bounds = route.bounds;
  route.bounds = new google.maps.LatLngBounds(
   new google.maps.LatLng(bounds.U.b,bounds.O.d), 
   new google.maps.LatLng(bounds.U.d,bounds.O.b));

  for(l=0; l<route.legs.length;l++) {
   var leg = route.legs[l];
   leg.start_location = new google.maps.LatLng(leg.start_location.wa,leg.start_location.ya);
   leg.end_location = new google.maps.LatLng(leg.end_location.wa,leg.end_location.ya);

   for(s=0; s<leg.steps.length;s++) {
    var step = leg.steps[s];
    step.start_location = 
     new google.maps.LatLng(step.start_location.wa,step.start_location.ya);
    step.end_location = 
     new google.maps.LatLng(step.end_location.wa,step.end_location.ya);

    for(p=0;p<step.path.length;p++) {
     var path=step.path[p];
     step.path[p] = new google.maps.LatLng(step.path.wa,step.path.ya);
    }
   }
  }

  for(o=0; o<route.overview_path.length;o++) {
   var overview = route.overview_path[o];
   route.overview_path[o] = new google.maps.LatLng(overview.wa,overview.ya);
  }
 }
} 
11
задан KJYe.Name 葉家仁 22 April 2011 в 16:47
поделиться