本文实例为大家分享了Openlayers实现距离面积测量的具体代码,供大家参考,具体内容如下
CSS
.ol-tooltip { position: relative; background: rgba(0, 0, 0, 0.5); border-radius: 4px; color: white; padding: 4px 8px; opacity: 0.7; white-space: nowrap; font-size: 12px; } .ol-tooltip-measure { opacity: 1; font-weight: bold; } .ol-tooltip-static { background-color: #ffcc33; color: black; border: 1px solid white; } .ol-tooltip-measure:before, .ol-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%; } .ol-tooltip-static:before { border-top-color: #ffcc33; }
具体实现
let layer_1 =new ol.layer.Tile({ source: new ol.source.OSM() }); let source = new ol.source.Vector(); let vector = new ol.layer.Vector({ source: source, style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.2)' }), stroke: new ol.style.Stroke({ color: '#ffcc33', width: 2 }), image: new ol.style.Circle({ radius: 7, fill: new ol.style.Fill({ color: '#ffcc33' }) }) }) }); let map=new ol.Map({ layers: [ layer_1 ,vector ], view: new ol.View({ center: [-11000000, 4600000], zoom: 5, }), target: 'map' }); let count=0; let draw; let sketch=new ol.Feature(); let listener; let helpTooltipElement; let helpTooltip; let measureTooltipElement; let measureTooltip; let continuePolygonMsg="继续点击绘制多边形"; let continueLineMsg="继续点击绘制线"; createMeasureTooltip(); createHelpTooltip(); let pointerMoveHandler=function(evt){ if (evt.dragging) { return; } /** @type {string} */ let helpMsg = 'Click to start drawing'; if (sketch) { let geom = (sketch.getGeometry()); if (geom instanceof ol.geom.Polygon) { helpMsg = continuePolygonMsg; } else if (geom instanceof ol.geom.LineString) { helpMsg = continueLineMsg; } } helpTooltipElement.classList.remove('hidden'); }; map.on('pointermove', pointerMoveHandler); map.getViewport().addEventListener('mouseout', function() { }); let formatLength=function (line) { let length = ol.sphere.getLength(line); let output; if(length>100){ output=(Math.round(length/1000*100)/100)+''+'km' }else{ output=(Math.round(length*100)/100)+''+'m' } return output; }; let formatArea=function (polygon) { let area = ol.sphere.getArea(polygon); let 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 addInteraction(){ let type="Polygon"; draw=new ol.interaction.Draw({ source:source, type:type, style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.2)' }), stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 0, 0.5)', lineDash: [10, 10], width: 2 }), 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: 'rgba(255, 255, 255, 0.2)' }) }) }), snapTolerance:50 }); map.addInteraction(draw); map.on('singleclick',function (evt) { measureTooltip.setPosition(evt.coordinate); if(count==0){ measureTooltipElement.innerHTML='起点' }else{ measureTooltipElement.className = 'ol-tooltip ol-tooltip-static'; measureTooltip.setOffset([0, -20]); // unset sketch sketch = null; // unset tooltip so that a new one can be created measureTooltipElement = null; createMeasureTooltip(); //map.removeInteraction(draw); } createMeasureTooltip(); //点击次数增加 count++; }); draw.on('drawstart',function (evt) { sketch=evt.feature; let tooltipCoord=evt.coordinate; listener=sketch.getGeometry().on('change',function (evt) { let geom=evt.target; let output; if(geom instanceof ol.geom.Polygon){ map.removeEventListener('singleclick'); output=formatArea(geom); tooltipCoord=geom.getInteriorPoint().getCoordinates(); }else if(geom instanceof ol.geom.LineString){ output=formatLength(geom); tooltipCoord=geom.getLastCoordinate(); } measureTooltipElement.innerHTML = output; measureTooltip.setPosition(tooltipCoord); }) }); draw.on('drawend', function() { 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(); map.removeInteraction('singleclick'); count=0; ol.Observable.unByKey(listener); }); } function createHelpTooltip() { if (helpTooltipElement) { helpTooltipElement.parentNode.removeChild(helpTooltipElement); } helpTooltipElement = document.createElement('div'); helpTooltipElement.className = 'ol-tooltip hidden'; helpTooltip = new ol.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 = new ol.Overlay({ element: measureTooltipElement, offset: [-30, -30], positioning: 'center-center' }); map.addOverlay(measureTooltip); } /** * Let user change the geometry type. */ addInteraction();
参考官网教程
在线引用地址
风云阁资源网 Design By www.bgabc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
风云阁资源网 Design By www.bgabc.com
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月19日
2024年11月19日
- 黑鸭子2008-男人女人[首版][WAV+CUE]
- 张佳佳 《FOLK SONG Ⅱ Impromptus OP.23(即兴曲7首)》[320K/MP3][98.71MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[320K/MP3][118.55MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[FLAC/分轨][268.08MB]
- 张信哲.1996-思念【EMI百代】【WAV+CUE】
- 江美琪.2024-圆的?圆的>华纳】【FLAC分轨】
- 许巍.2018-无尽光芒【和雅弘嘉】【WAV+CUE】
- 庆怜 CAELAN《THE HALF-BLOOD PRINCE 半血王子》[320K/MP3][65.72MB]
- 庆怜 CAELAN《THE HALF-BLOOD PRINCE 半血王子》[FLAC/分轨][378.53MB]
- Fine乐团《废墟游乐》[320K/MP3][105.13MB]
- 万山红.2009-花开原野万山红Vol.1-2【柏菲】2CD【WAV+CUE】
- 曾庆瑜1992-18首中英文经典全集[台湾派森][WAV整轨]
- 【上扬爱乐】群星-TheSoundsofLS35AVol.4情迷4【低速原抓WAV分轨】
- Fine乐团《废墟游乐》[Hi-Res][24bit 48kHz][FLAC/分轨][767.04MB]
- Cicada《回返 (十五周年自选集)》[320K/MP3][93.87MB]