getFeatures() пуст.

У меня есть аналогичный вопрос, такой как POI в OpenLayer 3, но не то же самое.

Я рисую карту с файлом KML:

var layerVector = new ol.layer.Vector({
    source : new ol.source.KML({
        projection : projection,
        url : _url
    }),
});

Он работает нормально, и я вижу точки из файла KML на карте.

(Using <Style> and <styleUrl> Tags in the KML file.)

Но если я попытаюсь увидеть функции, я получу пустой массив.

console.log( layerVector.getSource().getFeatures() );

==> Array [ ]

Есть идеи?

спасибо мкс


person mxxv    schedule 03.04.2015    source источник
comment
Не могли бы вы создать свернутый пример на jsfiddle.net? Так было бы легче отлаживать.   -  person Alexandre Dubé    schedule 03.04.2015


Ответы (1)


См. ответ в нашем следующем разделе часто задаваемых вопросов:

https://github.com/openlayers/ol3/blob/master/doc/faq.md

по ссылке выше:

Почему в моем источнике нет никаких функций?

Предположим, вы хотите загрузить файл KML и отобразить содержащиеся в нем объекты на карте. Можно использовать следующий код:

var vector = new ol.layer.Vector({
  source: new ol.source.KML({
    projection: 'EPSG:3857',
    url: 'data/kml/2012-02-10.kml'
  })
});

Вы можете спросить себя, сколько функций в этом KML, и попробовать что-то вроде следующего:

var vector = new ol.layer.Vector({
  source: new ol.source.KML({
    projection: 'EPSG:3857',
    url: 'data/kml/2012-02-10.kml'
  })
});
var numFeatures = vector.getSource().getFeatures().length;
console.log("Count right after construction: " + numFeatures);

Это зарегистрирует количество 0 функций в источнике. Это связано с тем, что загрузка KML-файла будет происходить асинхронно. Чтобы получить подсчет как можно скорее (сразу после извлечения файла и заполнения источника функциями), вы должны использовать функцию прослушивания событий в источнике:

vector.getSource().on('change', function(evt){
  var source = evt.target;
  if (source.getState() === 'ready') {
    var numFeatures = source.getFeatures().length; 
    console.log("Count after change: " + numFeatures);
  }
});

Это правильно сообщит о количестве функций, 1119 в этом конкретном случае.

person bartvde    schedule 03.04.2015