OpenLayers3: Ошибка после удаление feature

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Warden
Интересующийся
Сообщения: 25
Зарегистрирован: 16 сен 2015, 16:43
Репутация: 7
Откуда: Королёв

OpenLayers3: Ошибка после удаление feature

Сообщение Warden » 12 фев 2016, 13:29

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

Код: Выделить всё

Assertion failed: uid (145) of value ([object Object]) does not exist
Когда дорисовываешь вылетает:

Код: Выделить всё

Uncaught AssertionError: Assertion failed: featureKey exists in featureChangeKeys
Иногда даже слетает карта.
Вот код:

Код: Выделить всё

var lineDraw;
            var areaDraw;
            var divMap = document.createElement("div");
            var divMouse = document.createElement("div");
            divMap.id = 'map';
            divMouse.id="mouse-position";
            document.body.appendChild(divMap);
            document.body.appendChild(divMouse);
            var btnClose = document.createElement("input");
            var divBtnPan = document.createElement("div");
            var divBtnLine = document.createElement("div");
            var divBtnArea = document.createElement("div");
            var divBtnErase = document.createElement("div");
            var imgPan = document.createElement("img");
            var imgLine = document.createElement("img");
            var imgArea = document.createElement("img");
            var imgErase = document.createElement("img");
            imgPan.src = "css/img/pan.png";
            imgPan.classList.add('imgPan');
            imgPan.classList.add('active');
            imgLine.src= "css/img/length-measure_8411.png";
            imgLine.classList.add('imgLine');
            imgArea.src= "css/img/area-measure_3056.png";
            imgArea.classList.add('imgArea');
            imgErase.src= "css/img/eraser.png";
            imgErase.classList.add('imgErase');
            divBtnPan.appendChild(imgPan);
            divBtnLine.appendChild(imgLine);
            divBtnArea.appendChild(imgArea);
            divBtnErase.appendChild(imgErase);
            divBtnPan.id = 'pan';
            divBtnLine.id = 'line';
            divBtnArea.id = 'area';
            divBtnErase.id = 'erase';
            btnClose.classList.add('btnClose');
            btnClose.type = 'image';
            btnClose.value = " ";
            var name = event.target.parentNode.parentNode.firstChild.innerHTML;
            layer_name = 'geoportal:' + name;
            var format = "image/png";
            var mousePositionControl = new ol.control.MousePosition({
                coordinateFormat: ol.coordinate.createStringXY(2),
                projection: 'EPSG:4326',
                className: 'custom-mouse-position',
                target: document.getElementById('mouse-position'),
                undefinedHTML: ' '
            });

            var map = new ol.Map({
                controls: ol.control.defaults({
                    attributionOptions:({
                    collapsible: false
                    })
                }).extend([mousePositionControl,
                new ol.control.OverviewMap()]),
                layers: [
                    new ol.layer.Tile({source: new ol.source.OSM()}),
                    new ol.layer.Tile({
                    visible: true,
                    zIndex: 995,
                    source: new ol.source.TileWMS({
                      preload: Infinity,
                      url: 'http://192.168.255.197:8080/geoserver/geoportal/wms',
                      serverType: 'geoserver',
                      params: {'FORMAT': format, 
                               'VERSION': '1.1.1',
                               'TILED': true,
                            LAYERS: layer_name,
                            STYLES: ''
                      }
                    })
                  })
                ],
                view: new ol.View({
                  center: ol.proj.transform([55.75, 37.61], 'EPSG:4326', 'EPSG:3857'),
                  zoom: 2,
                  projection: 'EPSG:3857'
                }),
                target: 'map'
              });
            $('.ol-viewport').append(btnClose);
            $('.ol-viewport').append(divBtnPan);
            $('.ol-viewport').append(divBtnArea);
            $('.ol-viewport').append(divBtnLine);
            $('.ol-viewport').append(divBtnErase);
            $('.ol-rotate').remove();
            $('.ol-attribution').remove();
            $('.btnClose')[0].remove();
            $('.btnClose').on('click', closeMap);
            $('.imgPan')[0].remove();
            $('.imgPan').on('mouseover', changePanIcon);
            $('.imgPan').on('mouseout', changePanIcon1);
            $('.imgLine')[0].remove();
            $('.imgLine').on('mouseover', changeLineIcon);
            $('.imgLine').on('mouseout', changeLineIcon1);
            $('.imgArea')[0].remove();
            $('.imgArea').on('mouseover', changeAreaIcon);
            $('.imgArea').on('mouseout', changeAreaIcon1);
            $('.imgErase')[0].remove();
            $('.imgErase').on('mouseover', changeEraseIcon);
            $('.imgErase').on('mouseout', changeEraseIcon1);
            var drawSource = new ol.source.Vector();
            var drawLayer = new ol.layer.Vector({
                zIndex: 999,
                source:drawSource
            });
            var select = new ol.interaction.Select();
            var erase = new ol.interaction.Select();
            var lineDraw = new ol.interaction.Draw({
                source: drawSource,
                type: 'LineString'
            });
            var lineArea = new ol.interaction.Draw({
                source: drawSource,
                type: 'Polygon'
            });
            $('.imgPan').click(function(){
                clearCustomInteraction();
                $(this).addClass('active');
                return false;
            })
            $('.imgLine').click(function(){
                clearCustomInteraction();
                $(this).addClass('active');
                map.addInteraction(lineDraw);
                lineDraw.on('drawEnd', function(e){
                });
            });
            $('.imgArea').click(function(){
                clearCustomInteraction();
                $(this).addClass('active');
                map.addInteraction(lineArea);
                lineArea.on('drawEnd', function(e){
                });
            })
            $('.imgErase').click(function(){
                clearCustomInteraction();
                $(this).addClass('active');
                map.addInteraction(erase);
                erase.getFeatures().on('change:length', function(e){
                    if(e.target.getArray().length !== 0){
                        drawLayer.getSource().removeFeature(e.target.item(0));
                    }
                });
                return false;
            });             
            map.addLayer(drawLayer);
            function clearCustomInteraction(){
                $('.ol-viewport').find('img').removeClass('active');                    
                changePanIcon1();
                changeLineIcon1();
                changeAreaIcon1();
                changeEraseIcon1();
                map.removeInteraction(lineDraw);
                map.removeInteraction(lineArea);
            }
        }


        function closeMap(){
            $('#map').remove();
            $('#mouse-position').remove();
        }
        function changePanIcon(){
            $('.imgPan').attr('src', 'css/img/pan.png');
        }
        function changePanIcon1(){
            if($('.imgPan').hasClass('active')){
                $('.imgPan').attr('src', 'css/img/pan.png');
            } else{
                $('.imgPan').attr('src', 'css/img/pan+.png');
            }
        }
        function changeLineIcon(){
            $('.imgLine').attr('src', 'css/img/length-measure_8411.ico')
        }
        function changeLineIcon1(){
            if($('.imgLine').hasClass('active')){
                $('.imgLine').attr('src', 'css/img/length-measure_8411.ico');
            } else{
                $('.imgLine').attr('src', 'css/img/length-measure_8411.png');
            }
        }
        function changeAreaIcon(){
            $('.imgArea').attr('src', 'css/img/area-measure_3056.ico')
        }
        function changeAreaIcon1(){
            if($('.imgArea').hasClass('active')){
                $('.imgArea').attr('src', 'css/img/area-measure_3056.ico');
            } else{
                $('.imgArea').attr('src', 'css/img/area-measure_3056.png');
            }
        }
        function changeEraseIcon(){
            $('.imgErase').attr('src', 'css/img/eraser+.png')
        }
        function changeEraseIcon1(){
            if($('.imgErase').hasClass('active')){
                $('.imgErase').attr('src', 'css/img/eraser+.png');
            } else{
                $('.imgErase').attr('src', 'css/img/eraser.png');
            }
        }

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 41 гость