Hi all.

I'm trying to save a DirectionsResult to my database and then retrieve it later 
to use on a map.  My problem is that when I try to re-hydrate the saved object 
by pulling its JSON representation from my database, the object is just dumb 
JSON, it doesn't have the original methods and functions of its constituent 
objects.  So, I built a fix routine that takes the dumb JSON and rebuilds it by 
reconstructing all the LatLng and LatLngBound objects. But, something is still 
missing because my fixed object doesn't work like the original, the two points 
show up on my map but the purple line between them is missing.

I'd appreciate advice on either a better technique for serialization/hydration 
or any ideas as to what my fix routine might be missing.

Thanks.

li<https://lh4.googleusercontent.com/_gu5klFb-KrY/TRt2Y2l5K8I/AAAAAAAAAPo/GlnZD8f7X-Q/LineMissing.PNG>

<https://lh5.googleusercontent.com/_gu5klFb-KrY/TRt2SSJ0u_I/AAAAAAAAAPc/y25anaHDtvA/withLine.PNG>

******** CODE ********

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 DATABASE
      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);
                }
        }
} 

-- 
You received this message because you are subscribed to the Google Groups 
"Google Maps JavaScript API v3" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-maps-js-api-v3?hl=en.

Reply via email to