/**
* Currently drawn feature.
* @type {import("../src/ol/Feature.js").default}
*/
var sketch;/**
* The help tooltip element.
* @type {HTMLElement}export-png
*/
var helpTooltipElement;/**
* Overlay to show the help messages.
* @type {Overlay}
*/
var helpTooltip;/**
* The measure tooltip element.
* @type {HTMLElement}
*/
var measureTooltipElement;/**
* Overlay to show the measurement.
* @type {Overlay}
*/
var measureTooltip;/**
* Message to show when the user is drawing a polygon.
* @type {string}
*/
var continuePolygonMsg ='Click to continue drawing the polygon';/**
* Message to show when the user is drawing a line.
* @type {string}
*/
var continueLineMsg ='Click to continue drawing the line';/**
* Handle pointer move.
* @param {import("../src/ol/MapBrowserEvent").default} evt The event.
*/
var pointerMoveHandler = function (evt){if(evt.dragging){return;}/** @type {string} */
var helpMsg ='Click to start drawing';if(sketch){
var geom = sketch.getGeometry();if(geom instanceofol.geom.Polygon){
helpMsg = continuePolygonMsg;}elseif(geom instanceofol.geom.LineString){
helpMsg = continueLineMsg;}}// helpTooltipElement.innerHTML = helpMsg;// helpTooltip.setPosition(evt.coordinate);// helpTooltipElement.classList.remove('hidden');};
map.on('pointermove', pointerMoveHandler);
map.getViewport().addEventListener('mouseout', function (){// helpTooltipElement.classList.add('hidden');});// var typeSelect = document.getElementById('type');
var draw;// global so we can remove it later/**
* Format length output.
* @param {LineString} line The line.
* @return {string} The formatted length.
*/
var formatLength = function (line){
var length = ol.sphere.getLength(line);
var output;if(length >100){
output = Math.round((length /1000)*100)/100+' '+'km';}else{
output = Math.round(length *100)/100+' '+'m';}return output;};/**
* Format area output.
* @param {Polygon} polygon The polygon.
* @return {string} Formatted area.
*/
var formatArea = function (polygon){
var area = ol.sphere.getArea(polygon);
var output;if(area >10000){
output = Math.round((area /1000000)*100)/100+' '+'km<sup>2</sup>';}else{
output = Math.round(area *100)/100+' '+'m<sup>2</sup>';}return output;};
function addInteractions(type1){
type = type1 =='area'?'Polygon':'LineString';// type = 'Polygon';
draw =newol.interaction.Draw({
source: source,
type: type,
style:newol.style.Style({
fill:newol.style.Fill({
color:'rgba(0, 0, 255, 0.2)',}),
stroke:newol.style.Stroke({
color:'rgba(100, 0, 255, 0.5)',
lineDash:[10,10],
width:2,}),
image:newol.style.Circle({
radius:5,
stroke:newol.style.Stroke({
color:'rgba(255, 0, 255, 0.7)',}),
fill:newol.style.Fill({
color:'rgba(0, 255, 255, 0.5)',}),}),}),});
map.addInteraction(draw);createMeasureTooltip();createHelpTooltip();
var listener;
draw.on('drawstart', function (evt){if(clickmeause =="measure"){// set sketch
sketch = evt.feature;/** @type {import("../src/ol/coordinate.js").Coordinate|undefined} */
var tooltipCoord = evt.coordinate;
listener = sketch.getGeometry().on('change', function (evt){
var geom = evt.target;
var output;if(geom instanceofol.geom.Polygon){
output =formatArea(geom);
tooltipCoord = geom.getInteriorPoint().getCoordinates();}elseif(geom instanceofol.geom.LineString){
output =formatLength(geom);
tooltipCoord = geom.getLastCoordinate();}
measureTooltipElement.innerHTML = output;
measureTooltip.setPosition(tooltipCoord);});}});
draw.on('drawend', function (){if(clickmeause =="measure"){
measureTooltipElement.className ='ol-tooltip ol-tooltip-static';
measureTooltip.setOffset([0,-7]);// unset sketch
sketch = null;// unset tooltip so that a new one can be created
measureTooltipElement = null;createMeasureTooltip();
ol.Observable.unByKey(listener);}});}/**
* Creates a new help tooltip
*/
function createHelpTooltip(){if(helpTooltipElement){
helpTooltipElement.parentNode.removeChild(helpTooltipElement);}
helpTooltipElement = document.createElement('div');
helpTooltipElement.className ='ol-tooltip hidden';
helpTooltip =newol.Overlay({
element: helpTooltipElement,
offset:[15,0],
positioning:'center-left',});
map.addOverlay(helpTooltip);}/**
* Creates a new measure tooltip
*/
function createMeasureTooltip(){if(measureTooltipElement){
measureTooltipElement.parentNode.removeChild(measureTooltipElement);}
measureTooltipElement = document.createElement('div');
measureTooltipElement.className ='ol-tooltip ol-tooltip-measure';
measureTooltip =newol.Overlay({
element: measureTooltipElement,
offset:[0,-15],
positioning:'bottom-center',});
map.addOverlay(measureTooltip);}/**
* Let user change the geometry type.
*/
var clickmeause="measuress";
function getMeasure(type){
clickmeause ="measure"
var source =newol.source.Vector();
var vector =newol.layer.Vector({
source: source,
style:newol.style.Style({
fill:newol.style.Fill({
color:'rgba(255, 0, 0, 0.5)',}),
stroke:newol.style.Stroke({
color:'#e21e0a',
width:2,}),
image:newol.style.Circle({
radius:7,
fill:newol.style.Fill({
color:'#ffcc33',}),}),}),});
map.addLayer(vector);if(type==0){
map.removeInteraction(draw);
clickmeause ="measuress"}else{// alert(data.value);
map.removeInteraction(draw);addInteractions(type);}}// addInteraction(0);
function clearMeasure(){getMeasure(Number(0))getLine('None')// ol.measureSourceLay.clear();// map.removeLayer(measureLay);// map.getOverlays().clear();//关键点// map.removeInteraction(drawLineControl);// map.removeInteraction(drawAreaControl);
source.clear();// map.removeOverlay(measureTooltip);
map.getOverlays().clear();// map.getOverlays().clear();//关键点// map.removeInteraction(drawLineControl);// map.removeInteraction(drawAreaControl);
popup =newol.Overlay({//要转换成overlay的HTML元素
element: container,//当前窗口可见
autoPan:true,//Popup放置的位置
positioning:'bottom-center',//是否应该停止事件传播到地图窗口
stopEvent:false,
autoPanAnimation:{//当Popup超出地图边界时,为了Popup全部可见,地图移动的速度
duration:250}});
map.addOverlay(popup);}