2014-02-04 5 views
1

Итак, у меня есть GeoJSON поток, который выглядит, как этотКак перебрать GeoJSON Лента новостей для Google Map

{ 
    "type" : "FeatureCollection", 
    "features" : [ 
    { 
     "type" : "Feature", 
     "geometry" : { 
     "type" : "Point", 
     "coordinates" : [ 
      -84.50926612, 
      39.1423275 
     ] 
     }, 
     "properties" : { 
     "name" : "<a href=\"/Things-To-Do/Attractions/cincinnati-zoo-botanical-garden\">Cincinnati Zoo &amp; Botanical Garden</a>", 
     "description" : "" 
     } 
    }, 
    { 
     "type" : "Feature", 
     "geometry" : { 
     "type" : "Point", 
     "coordinates" : [ 
      -84.495935481675, 
      39.095853705988 
     ] 
     }, 
     "properties" : { 
     "name" : "<a href=\"/Things-To-Do/Attractions/bb-riverboats-thanksgiving-day-cruise\">BB Riverboats Thanksgiving Day Cruise</a>", 
     "description" : "" 
     } 
    } 
    ] 
} 

Я загружая его с помощью этой функции

var attbut = document.getElementById('loadatt'); 
attbut.addEventListener('click', function() { 
var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'path-to-GeoJson', true); 
xhr.onload = function() { 
loadAttractions(this.responseText); 
}; 
xhr.send(); 
}); 

И загружается нормально. Однако я не могу заставить свойство length использовать итерацию.

function loadAttractions(results) { 
log(results.FeatureCollection.length); 
for (var i = 0; i < results.FeatureCollection.length; i++) { 
var coords = results.features[i].geometry.coordinates; 
var latLng = new google.maps.LatLng(coords[1],coords[0]); 
    var marker = new google.maps.Marker({ 
    position: latLng, 
    map: map 
    }); 
} 
}  

Я попытался results.features.length и results.FeatureCollection.features.length, единственное, что «работает» является results.length, что дает весь массив. Все остальное дает неопределенную ошибку.

Спасибо за любые предложения или помощь.

+0

Асумпинг вашего объекта json проверяется на переменные вызываемые результаты. Это не массив, это объект. results.features.length должен отлично работать – Dalorzo

+0

Спасибо за ответ. Я называю это «результатами» в функции loadattractions. Т.е., функция 1, загружает данные и передает их на loadAtrractions (результаты). Затем попытаемся получить длину результатов. results.feaures.length НЕ работает. –

ответ

0

Спасибо всем, кто помог. Моя проблема заключалась в том, что я собирал JSON как «текст»

loadAttractions (this.responseText);

Когда я должен был разбор, как JSON

Результаты вар = JSON.parse (this.responseText);

Это заставило его работать. Еще раз спасибо.

1

Как Далорзо упоминает, если у вас есть результаты var, results.features.length работает с этими данными для меня.

Если у вас есть доступ к underscore.js, существует метод _.size, который даст вам количество объектов, но не кажется, что вам понадобится его, чтобы захватить это.

+0

Но это не так. Я получаю Не могу прочитать свойство «длина» неопределенного, когда я использую results.features.length - работает только results.length. –

1

Вот скрипка, работающая с results.features.length.

http://jsfiddle.net/dXQeP/

+0

Спасибо за помощь. Это так странно. Я установил response.text для результатов переменных (я даже предупредил результаты), поэтому он действительно присутствует. Но я продолжаю получать неопределенную ошибку по длине. –

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