Я использую API GoogleMaps v3.0 и пытаюсь сохранить DirectionsResult в моей базе данных, а затем получить его позже, чтобы использовать его на карте. Моя проблема в том, что когда я пытаюсь повторно убрать сохраненный объект, вытаскивая его представление JSON из моей базы данных, объект просто тупой JSON, у него нет оригинальных методов и функций его составных объектов. Итак, я построил процедуру исправления, которая принимает текст Dumbalt JSON и восстанавливает его, восстанавливая все объекты LatLng и LatLngBound. Но что-то по-прежнему отсутствует, потому что мой фиксированный объект не работает, как оригинал, две точки отображаются на моей карте, но фиолетовая линия между ними отсутствует.
Порадовал бы любой совет по лучшей методике сериализации/гидратации или любых идей относительно того, что моя программа исправления может отсутствовать.
Спасибо
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);
}
}
}