0

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

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

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

我使用地图中的 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。

4

2 回答 2

2

只需序列化纬度/经度。

序列化对象的原型或函数属性不能很好地工作,因为它们必须为此进行字符串化,并且当您尝试将字符串转回函数时,您将丢失对原始范围内可见的变量的所有引用,但现在看不到了。而且你也不能轻易猜到以后如何手动恢复正确的原型,因为原型随时可能发生变化。而且您会将您的对象绑定到特定版本的 LatLng 原型,当 API 更新时,这将不会很有趣。

更不用说序列化这么多数据会比普通的 lat/lng 占用更多的 cookie 空间。

于 2012-04-20T20:22:11.073 回答
1

getCenter()已经为您提供了价值。因此,您可以将其转换为 JSON 字符串,并在您想再次使用它时对其进行解析;

var center = JSON.stringify(map.getCenter());
$.cookies.set( 'map_center', center);

当您想从 cookie 中读取数据时;

var centerpointFromCookie = $.cookies.get('map_center);
map.setCenter(JSON.parse(centerpointFromCookie));
于 2012-04-20T20:24:46.403 回答