javascript - 序列化 GoogleMapsLatLng 并存储在 cookie 中

标签 javascript google-maps-api-3

我正在尝试将 Google map 的中心点存储到 Cookie 中,并在下次加载页面时将 map 恢复到最后的位置。

当然,我可以将纬度和经度作为字符串或序列化数组或其他内容保存到 cookie 中,但我很好奇是否可以将 Google Maps LatLng 对象 JSON 序列化到 cookie,然后稍后恢复它时间。

我正在使用 JQuery 和这个库:http://code.google.com/p/cookies/

我使用 map 中的 LatLng 设置 cookie:

$.cookies.set( 'map_center', map.getCenter());

然后我尝试读出它,期望序列化/反序列化将恢复我的对象......

var centerpointFromCookie = $.cookies.get('map_center);
map.setCenter(centerpointFromCookie);

但对象类型似乎未保留。在脚本控制台中,这是 LatLng 对象在序列化并存储在 cookie 中之前的样子:

map.getCenter()
O
$a: 151.21950000000004
Za: -33.8688
__proto__: O
constructor: function O(a, b, c) {a-=0;b-=0;c||(a=Bd(a,-90,90),b=Cd(b,-180,180));this.Za=a;this.$a=b;}
equals: function (a) {return!a?k:Dd(this.lat(),a.lat())&&Dd(this.lng(),a.lng());}
lat: function () {return this[a];}
lng: function () {return this[a];}
toString: function () {return"("+this.lat()+", "+this.lng()+")";}
toUrlValue: function (a) {a=Hd(a)?a:6;return ae(this.lat(),a)+","+ae(this.lng(),a);}
__proto__: Object

这就是之后的样子:

centerpointFromCookie
Object
$a: 151.21950000000004
Za: -33.8688
__proto__: Object
__defineGetter__: function __defineGetter__() {
__defineSetter__: function __defineSetter__() {
__lookupGetter__: function __lookupGetter__() {
__lookupSetter__: function __lookupSetter__() {
constructor: function Object() {
hasOwnProperty: function hasOwnProperty() {
isPrototypeOf: function isPrototypeOf() {
propertyIsEnumerable: function propertyIsEnumerable() {
toLocaleString: function toLocaleString() {
toString: function toString() {
valueOf: function valueOf() {

反序列化时是否需要将对象转换为 GoogleMapsLatLng 类型?我知道我可以只存储这些值,但我想了解如何正确地将这样的小对象序列化为 cookie。

最佳答案

只需序列化纬度/经度即可。

序列化对象的原型(prototype)或函数属性效果不佳,因为它们必须为此进行字符串化,并且当您尝试将字符串转回函数时,您将丢失对原始中可见变量的所有引用范围但现在不可见。 而且您无法轻易猜测稍后如何手动恢复正确的原型(prototype),因为原型(prototype)可以随时更改。 而且您将把您的对象与特定版本的 LatLng 原型(prototype)联系起来,当 API 更新时,这将不再有趣。

更不用说序列化这么多数据会比普通的纬度/经度在 cookie 中占用更多的空间。

关于javascript - 序列化 GoogleMapsLatLng 并存储在 cookie 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252778/

相关文章:

javascript - VKontakte Javascript SDK 用户电子邮件

javascript - 放置一个假的加载屏幕来给人一种计算需要时间的印象?

php - 使用 Javascript 设置值

backbone.js - 如何从 backbone.js 模型加载谷歌地图 API?

javascript - Google map - 模拟多边形点击时出现 "b is undefined"?

javascript - 谷歌地图 API : Get url for current view

javascript - 假设我的访问者启用了 javascript 是否合理?

Javascript 类继承,而不是函数

javascript - JavaScript 中 for 循环中未初始化的变量——它的语义是什么?

javascript - 谷歌地图 API : Clear autocomplete results