vectorSource.addFeatures с массивом параметров, содержащим более 10 объектов, используя openlayers 4.3.3

#openlayers-3

#openlayers-3

Вопрос:

У меня есть карта, и я хотел бы добавить функции. Объекты всегда добавляются правильно в конце массива. Если добавлено более 10 объектов, одиннадцать — вставляется в любом месте.

 draw.on('drawend', function(evt) {
    var feature = evt.feature;
    var anfang = ol.proj.transform(feature.getGeometry().getFirstCoordinate(), 'EPSG:3857', 'EPSG:4326');
    var ende = ol.proj.transform(feature.getGeometry().getLastCoordinate(), 'EPSG:3857', 'EPSG:4326');


        var url = '?lonlats=' anfang '|' ende 'amp;nogos=amp;profile=shortestamp;alternativeidx=0amp;format=geojson';
        url = encodeURIComponent(url);
        url = broutes url;
        var response = new XMLHttpRequest();
        response.open('GET', url);
        var onError = function() {
            console.log('error');
        }

        response.onerror = onError;
        response.onload = function() {
            if (response.status == 200) {
                var data = Ext.decode(response.responseText);
                var arr = data.features[0].geometry.coordinates;
                var arrayNew = [];
                for (i=0;  i<arr.length; i  ){
                    var n = ol.proj.transform(arr[i], 'EPSG:4326', 'EPSG:3857');
                    arrayNew.push(n);
                }
                var data = new ol.geom.LineString( arrayNew );
                //console.log(data);
                var featureSnake = new ol.Feature({
                        geometry: data
                });

                snakeSource.addFeature( featureSnake );
                var win = Ext.create('MyProject.view.window.Edit', {
                    record : featureSnake,
                    toDo: 'insert',
                });
                win.show();
            } else {
                onError();
            }
        }
  

Комментарии:

1.Смотрите github.com/openlayers/openlayers/issues/5729 Либо укажите собираемые функции, либо используйте spatialIndex: false openlayers.org/en/v4.6.5/apidoc /…

Ответ №1:

Я случайно изменил свой код, как вы мне сказали (используя версию 4.3.3)

 vectorSource = new ol.source.Vector({
    useSpatialIndex: false
});
  

Теперь у меня есть следующий результат vectorSource.getFeatures()

 polygon1
polygon2
...
polygon15
polygon2
polygon3
...
polygon15
polygon1
  

У меня есть все функции дважды.

Комментарии:

1. Регистрируете ли вы объекты по мере их добавления? Если ваш json возвращает объекты в экстенте, вы можете получить те же результаты, которые повторяются в тех же случаях. В документации говорится getFeatures() , что возвращает объекты в случайном порядке. При useSpatialIndex: false этом должна быть коллекция функций, чтобы вы также могли попробовать использовать getFeaturesCollection().getArray()

2. Спасибо, я решил проблему с помощью getFeatureCollection().getArray()