2016-02-17 3 views
0

Я пытаюсь взять два местоположения, найти направления между двумя точками, используя directionsService.route в API Карт Google, а затем сохранить объект направлений I ' m возвращается в localStorage для последующего использования. Я пытаюсь использовать нижеприведенное решение (для некоторой несвязанной проблемы), но его отказ в последних двух строках, потому что .extend(), .getNorthEast() и .getSouthWest() хранятся в прототипе объекта Google. Эти методы помогают установить границы новой карты при объединении нескольких отключений.Добавление функций прототипа обратно к возвращенному объекту API Карт Google при использовании JSON.stringify

https://lemonharpy.wordpress.com/2011/12/15/working-around-8-waypoint-limit-in-google-maps-directions-api/

if (count == 0) { 
    combinedResults = unsortedResults[key].result; 
} else { 
    // only building up legs, overview_path, and bounds in my consolidated object. This is not a complete 
    // directionResults object, but enough to draw a path on the map, which is all I need 
    combinedResults.routes[0].legs = combinedResults.routes[0].legs.concat(unsortedResults[key].result.routes[0].legs); 
    combinedResults.routes[0].overview_path = combinedResults.routes[0].overview_path.concat(unsortedResults[key].result.routes[0].overview_path); 
    combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getNorthEast()); 
    combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getSouthWest()); 
} 

Я пытался несколько обходных путей, чтобы сохранить функции прототипа при запуске через JSON.stringify() к JSON.parse() преобразования в но ничего не работает.

Update

Я попытался использовать этот add-on, чтобы помочь сохранить функции прототипа, которые он делает, но я не думаю, что его можно повторно добавить эти функции обратно в объект JS после его было сериализовать/десериализации как объект уже initialized

var serializer = new ONEGEEK.GSerializer(); 
var s = serializer.serialize(result.routes[0].bounds); 
var d = serializer.deserialize(s); 

То, что я в конечном итоге делает был немного хаком обходным подражать функции bounds.extend(), которая требует некоторых функций прототипа (ниже). Единственная проблема с этим решением, если мне нужно взаимодействовать с кэшированными объектами для что-нибудь еще, что я буду в таком же положении

var existing = combinedResults.routes[0].bounds; 
var adding = trip2.routes[0].bounds; 

existing.north = existing.north > adding.north ? existing.north : adding.north; 
existing.south = existing.south < adding.south ? existing.south : adding.south; 
existing.east = existing.east > adding.east ? existing.east : adding.east; 
existing.west = existing.west < adding.west ? existing.west : adding.west; 
+1

Как вы восстанавливаете объекты границ? Просьба представить [Минимальный, полный, проверенный и читаемый пример] (http://stackoverflow.com/help/mcve), который демонстрирует вашу проблему ** в вопросе ** (а не внешнюю ссылку). – geocodezip

+0

Я обновил свой ответ. Я думаю, что единственным способом восстановления объекта bound должным образом было бы сохранить все переменные 'bounds.extend', необходимые для его сериализации, а затем попытаться восстановить исходную функцию после. –

+0

Нет, это не так. Объект bounds определяется его SouthWest и NorthEast углами. – geocodezip

ответ

1

В основном это невозможно хранить функции в формате JSON на всех.

Что вы должны сделать, чтобы восстановить первоначальный LatLngBounds просто создает new LatLngBounds() с помощью сохраненного LatLngBoundsLiteral в качестве аргумента: например

var json=JSON.parse(//stored string 
        '{"bounds:{"south":41.9029,"west":2.3,"north":55.7,"east":37.6}}'); 
json.bounds=new google.maps.LatLngBounds(json.bounds); 
+0

Спасибо, это очень похоже на то, что я закончил делать. Моя цель здесь состоит в том, чтобы сократить проблему с лимитом запросов API Google, поэтому я смог просто имитировать необходимые функции границ. –