【问题标题】:How do I stringify a google LatLng object?如何对 google LatLng 对象进行字符串化?
【发布时间】:2011-08-24 19:29:41
【问题描述】:

我正在使用谷歌地图 API 并尝试将一组点串起来,每个点都有一个纬度和经度。我想要做的是对数据进行字符串化并将其存储在数据库中,以便以后可以检索到。问题在于,由于 google maps 存储和使用数据的方式,JSON.stringify 的结果有时奇怪地随机。例如,有时数据如下所示:

[{"Na":35.99663,"Oa":-78.94982},
 {"Na":35.996370000000006,"Oa":-78.94914},
 {"Na":35.99595,"Oa":-78.94833000000001},...]

有时完全相同的数据看起来像这样:

[{"Ia":35.99663,"Ja":-78.94982},
 {"Ia":35.996370000000006,"Ja":-78.94914},
 {"Ia":35.99595,"Ja":-78.94833000000001},...]

事实上,我已经看到了大约十种不同的变体。当我将字符串化数据存储在数据库中并检索它时,这会导致很多问题,因为我永远不知道期望哪种格式。我想要做的是替换键,使数据看起来更像这样:

[{"lat":35.99663,"lon":-78.94982},
 {"lat":35.996370000000006,"lon":-78.94914},
 {"lat":35.99595,"lon":-78.94833000000001},...]

我已经编写了代码来确定谷歌地图正在使用哪些随机字母。有了这些信息,我想用“lat”或“lon”替换这些随机字母的每个出现。我希望使用这样的替换方法...

function formatData(data) {
    //data is an object that I want to stringify

    //this testPoint and testString help us figure out which letters google is using this time around
    var testPoint = new google.maps.LatLng(23,45);
    var testString = JSON.stringify(testPoint);
    var strangeLat = testString.substring(2,4); //this is a random two character string which represents latitude in the stringified data
    var strangeLon = testString.substring(10,12); //this is a random two character string which represents longitude in the stringified data

    //stringify the data and replace all occurences of the random letters with lat and lon
    var formattedData = JSON.stringify(data, function(key,value) {
        //do something here to replace the keys
    });

    return formattedData;     
}

我知道如何用替换函数替换值,但我不知道如何替换键。我在网上搜索了一些类似的案例:JSON.stringify, change the case of the keyReplace keys JSON in javascript。但是,我无法理解它们,并且无法提出满足我需求的解决方案。

提前感谢您的任何帮助或建议!


更新!

谢谢大家。我能够结合您的建议提出解决方案。这是它的样子:

function formatData(data) {
    //data is an array of many LatLng objects

    newData = [];

    for(var i = 0; i < data.length; i++) {
        var obj = new Object();
        obj['lat'] = data[i].lat();
        obj['lon'] = data[i].lng();
        newData.push(obj);
    }

    return JSON.stringify(newData);     
}

【问题讨论】:

    标签: javascript json google-maps


    【解决方案1】:

    JSON.stringify 的行为并不奇怪...... Google 地图 API 使用随机密钥发送他们的 JSON,不幸的是你不能使用他们的密钥......

    如果您需要获取纬度和经度,您需要使用他们的 API 进行相同的...

    你需要用到的方法:

    lat() and lng() //refer: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng
    

    由于您在这里处理积分,因此您需要使用积分 API,在这种情况下,lat/lng 是属性...

    参考:http://code.google.com/apis/maps/documentation/javascript/reference.html#Point

    如果你还想继续使用 stringify :

    JSON.stringify({lat: testPoint.y , lon: testPoint.x);
    

    【讨论】:

    • 是的,我知道问题在于 google maps api 存储和使用数据的方式,而不是 JSON.stringify 方法本身。也许我在问我的问题时不清楚。
    【解决方案2】:

    只需使用JSON.stringify({lat: testPoint.lat(), lon: testPoint.lon()})

    【讨论】:

    【解决方案3】:

    下面的方法会做你想做的事

    var ar = [{"Ia":35.99663,"Ja":-78.94982},{"Ia":35.996370000000006,"Ja":-78.94914},{"Ia":35.99595,"Ja":-78.94833000000001}];
    
    var newAr = [];
    for(var i = 0; i < ar.length; i++)
    {
       var obj = new Object();
       var u = 0;
       for(var x in ar[i])
       { 
    
            if(u == 0)
             obj['lat'] = ar[i][x];
            else
             obj['lon'] = ar[i][x];
          u++;
        }
        newAr.push(obj);
    }
    alert(newAr.toSource());
    

    我做了什么: 1.我创建了新数组 2.然后我循环了ar 3.然后我从ar循环了对象属性 4. 我已将属性值分配给新属性

    就是这样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2012-07-17
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多