import Map from '../src/ol/Map.js'; import View from '../src/ol/View.js'; import {Draw, Modify, Select, Snap} from '../src/ol/interaction.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js'; import {Circle as CircleStyle, Fill, Stroke, Style} from '../src/ol/style.js'; const raster = new TileLayer({ source: new OSM() }); const vector = new VectorLayer({ source: new VectorSource(), style: new Style({ fill: new Fill({ color: 'rgba(255, 255, 255, 0.2)' }), stroke: new Stroke({ color: '#ffcc33', width: 2 }), image: new CircleStyle({ radius: 7, fill: new Fill({ color: '#ffcc33' }) }) }) }); const map = new Map({ layers: [raster, vector], target: 'map', view: new View({ center: [-11000000, 4600000], zoom: 4 }) }); const ExampleModify = { init: function() { this.select = new Select(); map.addInteraction(this.select); this.modify = new Modify({ features: this.select.getFeatures() }); map.addInteraction(this.modify); this.setEvents(); }, setEvents: function() { const selectedFeatures = this.select.getFeatures(); this.select.on('change:active', function() { selectedFeatures.forEach(function(each) { selectedFeatures.remove(each); }); }); }, setActive: function(active) { this.select.setActive(active); this.modify.setActive(active); } }; ExampleModify.init(); const optionsForm = document.getElementById('options-form'); const ExampleDraw = { init: function() { map.addInteraction(this.Point); this.Point.setActive(false); map.addInteraction(this.LineString); this.LineString.setActive(false); map.addInteraction(this.Polygon); this.Polygon.setActive(false); map.addInteraction(this.Circle); this.Circle.setActive(false); }, Point: new Draw({ source: vector.getSource(), type: 'Point' }), LineString: new Draw({ source: vector.getSource(), type: 'LineString' }), Polygon: new Draw({ source: vector.getSource(), type: 'Polygon' }), Circle: new Draw({ source: vector.getSource(), type: 'Circle' }), getActive: function() { return this.activeType ? this[this.activeType].getActive() : false; }, setActive: function(active) { const type = optionsForm.elements['draw-type'].value; if (active) { this.activeType && this[this.activeType].setActive(false); this[type].setActive(true); this.activeType = type; } else { this.activeType && this[this.activeType].setActive(false); this.activeType = null; } } }; ExampleDraw.init(); /** * Let user change the geometry type. * @param {Event} e Change event. */ optionsForm.onchange = function(e) { const type = e.target.getAttribute('name'); const value = e.target.value; if (type == 'draw-type') { ExampleDraw.getActive() && ExampleDraw.setActive(true); } else if (type == 'interaction') { if (value == 'modify') { ExampleDraw.setActive(false); ExampleModify.setActive(true); } else if (value == 'draw') { ExampleDraw.setActive(true); ExampleModify.setActive(false); } } }; ExampleDraw.setActive(true); ExampleModify.setActive(false); // The snap interaction must be added after the Modify and Draw interactions // in order for its map browser event handlers to be fired first. Its handlers // are responsible of doing the snapping. const snap = new Snap({ source: vector.getSource() }); map.addInteraction(snap);