<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>画图测量面积</title> <link rel="stylesheet" href="css/ol.css"> <script src="js/jquery-1.11.3.js"></script> <script src="js/ol.js"></script> <style> #map{ width:100%; height:100%; } .tooltip { position: relative; background: rgba(0, 0, 0, 0.5); border-radius: 4px; color: white; padding: 4px 8px; opacity: 0.7; white-space: nowrap; } .tooltip-measure { opacity: 1; font-weight: bold; } .tooltip-static { background-color: #ffcc33; color: black; border: 1px solid white; } .tooltip-measure:before, .tooltip-static:before { border-top: 6px solid rgba(0, 0, 0, 0.5); border-right: 6px solid transparent; border-left: 6px solid transparent; content: ""; position: absolute; bottom: -6px; margin-left: -7px; left: 50%; } .tooltip-static:before { border-top-color: #ffcc33; } </style> </head> <body> <div id="map"></div> <script> var map=new ol.Map({ target:'map', layers:[ new ol.layer.Tile({ source:new ol.source.OSM() }) ], view:new ol.View({ center:[0,0], zoom:2 }) });//初始化地图 var drawing_layer = new ol.layer.Vector({ source: new ol.source.Vector(), style:new ol.style.Style({ fill:new ol.style.Fill({ color:"rgba(225,225,225,.2)" }), stroke:new ol.style.Stroke({ color:"#ffcc33", 2 }), image:new ol.style.Circle({ radius:7, fill:new ol.style.Fill({ color:"#ffcc33" }) }) }) });// 画面积计算的图层 map.addLayer(drawing_layer); var polygon_drawing_tool = new ol.interaction.Draw({ source: drawing_layer.getSource(), type: 'Polygon', style: new ol.style.Style({ fill: new ol.style.Fill({ color: '#ffcc33' }), stroke: new ol.style.Stroke({ color: '#ffcc33', lineDash: [10, 10], 3 }), image: new ol.style.Circle({ radius: 5, stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 0, 0.7)' }), fill: new ol.style.Fill({ color: '#ffcc33' }) }) }) });//绘图控件对象 var listener;//绑定交互绘制工具开始绘制事件 var measureTooltipElement; polygon_drawing_tool.on('drawstart',function(evt) { sketch = evt.feature; var tooltipCoord = evt.coordinate; listener = sketch.getGeometry().on('change', function(evt) { var geom = evt.target; var output = formatArea(/** @type {ol.geom.LineString} */ (geom)); tooltipCoord = geom.getLastCoordinate(); createMeasureTooltip(); measureTooltipElement.innerHTML = output; measureTooltip.setPosition(tooltipCoord); }); }, this); polygon_drawing_tool.on('drawend',function() { measureTooltipElement.className = 'tooltip tooltip-static'; measureTooltip.setOffset([0, -7]); sketch = null; measureTooltipElement = null; createMeasureTooltip(); ol.Observable.unByKey(listener); }, this); var formatArea = function(polygon) { var area=polygon.getArea(); 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 createMeasureTooltip() { if (measureTooltipElement) { measureTooltipElement.parentNode.removeChild(measureTooltipElement); } measureTooltipElement = document.createElement('div'); measureTooltipElement.className = 'tooltip tooltip-measure'; measureTooltip = new ol.Overlay({ element: measureTooltipElement, offset: [0, -15], positioning: 'bottom-center' }); map.addOverlay(measureTooltip); } $(document).ready(function() { map.addInteraction(polygon_drawing_tool); }); </script> </body> </html>