Uso la API de GoogleMaps v3.0 y trato de guardar un DirectionsResult en mi base de datos y luego lo recupero para utilizarlo en un mapa. Mi problema es que cuando trato de rehidratar el objeto guardado sacando su representación JSON de mi base de datos, el objeto es simplemente tonto JSON, no tiene los métodos y funciones originales de sus objetos constituyentes. Entonces, construí una rutina de reparación que toma el texto de Dumbalt JSON y lo reconstruye reconstruyendo todos los objetos LatLng y LatLngBound. Pero, todavía falta algo porque mi objeto fijo no funciona como el original, los dos puntos aparecen en mi mapa pero falta la línea violeta entre ellos.No se puede deserializar el objeto DirectionsResult de GoogleMaps
Agradecería cualquier consejo sobre una mejor técnica para la serialización/hidratación o cualquier idea sobre lo que podría faltar en mi rutina de reparación.
Gracias
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);
}
}
}
Si alguien está interesado, también hemos publicado esta consulta para el foro de Google Maps, así: https://groups.google.com/d/topic/google-maps-js-api-v3/Ai1bZIVgfzo /discusión – sisdog