区域绘制
import {
Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon } from 'ol/geom';
import WKT from 'ol/format/WKT';
import Draw from 'ol/interaction/Draw';
import Overlay from 'ol/Overlay';
import LinearRing from 'ol/geom/LinearRing';
import {
drawSource, bufferSource } from '../Components/MyMap/MapLayers/MapLayers';
import './index.less';
let drawOption = {
};
let drawFeature;
let tooltipElement;
let tooltip;
const endPolygonMsg = '双击结束区域绘制';
const endLineMsg = '双击结束折线绘制';
const handleDrawingHelp = evt => {
if (evt.dragging) {
return;
}
let helpMsg = '点击开始绘制';
if (drawFeature) {
const geom = drawFeature.getGeometry();
if (geom instanceof Polygon) {
helpMsg = endPolygonMsg;
} else if (geom instanceof LineString) {
helpMsg = endLineMsg;
}
}
tooltipElement.innerHTML = helpMsg;
tooltip.setPosition(evt.coordinate);
tooltipElement.classList.remove('hidden');
};
const createTooltip = map => {
if (tooltipElement) {
tooltipElement.parentNode.removeChild(tooltipElement);
}
tooltipElement = document.createElement('div');
tooltipElement.className = 'ol-tooltip hidden';
tooltip = new Overlay({
element: tooltipElement,
offset: [15, 0],
positioning: 'center-left',
});
if (map && Object.keys(map)) {
map.addOverlay(tooltip);
}
};
export const addInteraction = (map, type, radius, handlerGetMapBuffer) => {
const draw = new Draw({
source: drawSource,
type,
stopClick: true,
});
drawOption = draw;
map.addInteraction(draw);
createTooltip(map);
map.renderSync();
draw.on('drawstart', e => {
map.renderSync();
drawSource.clear();
bufferSource.clear();
drawFeature = e.feature;
});
map.renderSync();
draw.on('drawend', evt => {
map.renderSync();
const {
feature } = evt;
drawFeature = null;
if (type !== 'Polygon') {
const parser = new jsts.io.OL3Parser();
parser.inject(
Point,
LineString,
LinearRing,
Polygon,
MultiPoint,
MultiLineString,
MultiPolygon,
);
feature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
const jstsGeom = parser.read(feature.getGeometry());
const buffered = jstsGeom.buffer(radius);
feature.setGeometry(parser.write(buffered));
feature.getGeometry().transform('EPSG:3857', 'EPSG:4326'