openlayers проверяет наличие вектора, чтобы избежать сообщения об ошибке - PullRequest
0 голосов
/ 31 августа 2018

Выполнять следующий код каждую секунду.

var new_source = new ol.source.Vector({
    url: 'pages/Coordinates.php',
    format: new ol.format.KML({
        extractStyles: false,
        extractAttributes: false
    })
});



var new_layer = new ol.layer.Vector({
    source: new_source,
    style: styling
});

map.addLayer(new_layer);


new_source.once('change', function() {
    if (x) {
        map.removeLayer(x);
    }
    x = new_layer;
});

Работает нормально, но если для источника нет координат, я получаю это сообщение об ошибке.

XML Parsing Error: no root element found Location: localhost/test/ Line Number 1, Column 1:

Есть идеи, как избежать этого сообщения об ошибке?

Я думал о том, чтобы проверить, установлен ли источник в состояние готовности, но он также говорит, что готов, когда нет координат.

Тогда я подумал о том, чтобы проверить, есть ли в нем функции, но тогда он не работал, даже когда он был.

Поэтому я решил посмотреть, есть ли какие-либо различия между «исходным» и / или «векторным» объектом с вызовом и без него, который включает координаты, но, увы, я не смог найти ничего, что я мог бы сравнить.

1 Ответ

0 голосов
/ 31 августа 2018

Ошибка, вероятно, возникает, когда OL пытается прочитать функции, поэтому вам нужно будет использовать пользовательский загрузчик, как в http://openlayers.org/en/v4.6.5/apidoc/ol.source.Vector.html, и использовать функцию, которая перехватывает ошибку, например что-то вроде:

var vectorSource = new ol.source.Vector({
  format: new ol.format.KML({
        extractStyles: false,
        extractAttributes: false
  }),
  loader: function(extent, resolution, projection) {
     var proj = projection.getCode();
     var url = 'pages/Coordinates.php';
     var xhr = new XMLHttpRequest();
     xhr.open('GET', url);
     var onError = function() {
       vectorSource.removeLoadedExtent(extent);
     }
     xhr.onerror = onError;
     xhr.onload = function() {
       if (xhr.status == 200) {
         try {
           vectorSource.addFeatures(
             vectorSource.getFormat().readFeatures(xhr.responseText));
         } catch(err) { onError(); }
       } else {
         onError();
       }
     }
     xhr.send();
   },
   strategy: ol.loadingstrategy.bbox
 });
...