Как я могу зачеркнуть объект Google LatLng? - PullRequest
4 голосов
/ 24 августа 2011

Я работаю с API карт Google и пытаюсь упорядочить массив точек, каждая из которых имеет широту и долготу.То, что я хочу сделать, это упорядочить данные и сохранить их в базе данных, чтобы их можно было извлечь позже.Проблема в том, что из-за того, как 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},...]

Я уже написал код, чтобы выяснить, какие случайные буквы используются в Google Maps.С этой информацией я хочу заменить каждое вхождение этих случайных букв на «лат» или «лон».Я надеюсь использовать метод замены, например, так ...

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, изменил регистр ключа и Заменил ключи JSON в 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);     
}

Ответы [ 3 ]

8 голосов
/ 24 августа 2011

JSON.stringify не ведет себя странно .. API карт Google отправляет свои json со случайными ключами, и вы, к сожалению, не можете работать с их ключами.

, если вам нужно получить широту и долготу, которые вам нужно использоватьих API для того же ..

, вам нужно использовать методы

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

, и, поскольку здесь вы имеете дело с точками, вам не нужно использовать API точек, и в этом случае лат /Это свойства ..

см .: http://code.google.com/apis/maps/documentation/javascript/reference.html#Point

, если вы все еще хотите пойти дальше и использовать stringify:

JSON.stringify({lat: testPoint.y , lon: testPoint.x);
1 голос
/ 24 августа 2011

Метод ниже будет делать то, что вы хотите

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. Затем я перебрал ар 3. Затем я перебрал свойства объекта из ар 4. и я назначил значения свойств новым свойствам

и это все

1 голос
/ 24 августа 2011

Просто используйте JSON.stringify({lat: testPoint.lat(), lon: testPoint.lon()}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...