In addition to using const and let, this also upgrades our linter config and removes lint (mostly whitespace).
151 lines
3.8 KiB
JavaScript
151 lines
3.8 KiB
JavaScript
import Map from '../src/ol/Map.js';
|
|
import View from '../src/ol/View.js';
|
|
import Draw from '../src/ol/interaction/Draw.js';
|
|
import Modify from '../src/ol/interaction/Modify.js';
|
|
import Select from '../src/ol/interaction/Select.js';
|
|
import Snap from '../src/ol/interaction/Snap.js';
|
|
import TileLayer from '../src/ol/layer/Tile.js';
|
|
import VectorLayer from '../src/ol/layer/Vector.js';
|
|
import OSM from '../src/ol/source/OSM.js';
|
|
import VectorSource from '../src/ol/source/Vector.js';
|
|
import CircleStyle from '../src/ol/style/Circle.js';
|
|
import Fill from '../src/ol/style/Fill.js';
|
|
import Stroke from '../src/ol/style/Stroke.js';
|
|
import Style from '../src/ol/style/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(selectedFeatures.remove, selectedFeatures);
|
|
});
|
|
},
|
|
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);
|