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