2015-02-17 15 views
0

Реальная проблема заключалась в том, что я не мог установить значение внутри координат.От geoJSON до Array

Начало JSON выглядит примерно так.

{ 
    "path":{ 
     "type":"FeatureCollection", 
     "features":[ 
      { 
       "geometry":{ 
        "type":"LineString", 
        "coordinates":[ 
         [ 
          10.4048129700337, 
          63.416688738540316 
         ], 
         [ 
          10.404757623420094, 
          63.4167327334674 
         ] 
        ] 
       }, 
       "type":"Feature", 
       "id":85624, 
       "properties":{ 
        "flags":[ 

        ], 
        "z":2.0, 
        "m":5.62957707088913e-06, 
        "target":85621, 
        "buildingId":43 
       } 
      } 

Когда я побежал код он дал мне

Это теперь решена. Я решил это так.

parseToObjects: function (data) { 
    var remakeObj = []; 
    var features = data.path.features; 
    for (var i in features) { 
     remakeObj[i] = { 
      flooring: "", 
      meters: "", 
      coordinates: [] 
     }; 

     var coordinates = features[i].geometry.coordinates; 

     for (var j in coordinates) { 
      remakeObj[i].coordinates[j] = []; 
      for (var k in coordinates[j]) { 

       remakeObj[i].coordinates[j][k] = coordinates[j][k]; 
       remakeObj[i].flooring = features[i].properties.z; 
       remakeObj[i].meters = features[i].properties.m; 

      } 
     } 

    } 
    console.log(remakeObj); 
    return remakeObj; 
} 
+0

не использовать для использования для цикла с индексом, тогда вы сделаете это правильно. – marko

ответ

0

Массивы в JavaScript практически hash tables (думаю о нем, как ведра, которые содержат значения и ключ для того, чтобы доступ к нему в пути), а не серийно номер индексированные только массивы.

Несмотря на то, что числовые индексы как ключи разрешены, массив может содержать также ключи других типов (string и т. Д.).

Следовательно, индекс 0 не вернет первый элемент массива, но элемент значения сохранен myArray[0], если он есть (в вашем случае его нет, и именно поэтому вы получаете сообщение об ошибке).

Вам нужно перебирать массив с помощью клавиш, установленных для того, чтобы получить доступ ко всем значения последовательно:

for (var key in myArray) { 
    var y = myArray[key]; //Index it like this, use it similarly. 
} 

UPDATE: Это то, что вы могли бы сделать (Предупреждение: неопробованный код):

for (var featuresKey in features) { 
    remakeObj[featuresKey] = [features.length]; 
    var coordinates = features[featuresKey].geometry.coordinates; 
    remakeObj[featuresKey].coordinates = new Array(coordinates.length); 

    for (var coordinatesKey in coordinates) { 

     for (var innerCoordinatesKey in coordinates[coordinatesKey]) { 
      remakeObj[featuresKey].coordinates[coordinatesKey][innerCoordinatesKey] = 
       coordinates[coordinatesKey][innerCoordinatesKey]; 
      remakeObj[featuresKey].flooring = features[featuresKey].properties.z; 
      remakeObj[featuresKey].meters = features[featuresKey].properties.m; 


     } 

    } 

} 
+0

Не могли бы вы привести пример? Он выполняет итерацию и устанавливает все значения, кроме координат. –

+0

Я изменил его на код. –

+0

Не размещайте свой код в комментариях. Пройдите экскурсию 'StackOverflow': http://stackoverflow.com/tour –

Смежные вопросы