Mercurial > pub > ImplabJs
comparison src/djol/MeasureToolBase.js @ 10:8705103f074f
Слияние
| author | cin |
|---|---|
| date | Mon, 21 Aug 2017 18:03:00 +0300 |
| parents | f0035923ff3e |
| children |
comparison
equal
deleted
inserted
replaced
| 9:37e9e6bbe87a | 10:8705103f074f |
|---|---|
| 1 define([ | |
| 2 "dojo/_base/declare", | |
| 3 "implab/safe", | |
| 4 "ol", | |
| 5 "./listen", | |
| 6 "./_ToolBase", | |
| 7 "dojo/dom-construct", | |
| 8 "dojo/dom-class" | |
| 9 ], function (declare, safe, ol, listen, _ToolBase, dconstruct, dclass) { | |
| 10 return declare([_ToolBase], { | |
| 11 _draw: null, | |
| 12 | |
| 13 drawStyle: new ol.style.Style({ | |
| 14 fill: new ol.style.Fill({ | |
| 15 color: 'rgba(255, 255, 255, 0.2)' | |
| 16 }), | |
| 17 stroke: new ol.style.Stroke({ | |
| 18 color: 'rgba(230, 126, 34, 0.7)', | |
| 19 lineDash: [10, 10], | |
| 20 width: 2 | |
| 21 }), | |
| 22 image: new ol.style.Circle({ | |
| 23 radius: 5, | |
| 24 stroke: new ol.style.Stroke({ | |
| 25 color: 'rgba(0, 0, 0, 0.7)' | |
| 26 }), | |
| 27 fill: new ol.style.Fill({ | |
| 28 color: 'rgba(255, 255, 255, 0.2)' | |
| 29 }) | |
| 30 }) | |
| 31 }), | |
| 32 | |
| 33 vectorStyle: new ol.style.Style({ | |
| 34 fill: new ol.style.Fill({ | |
| 35 color: 'rgba(255, 255, 255, 0.2)' | |
| 36 }), | |
| 37 stroke: new ol.style.Stroke({ | |
| 38 color: '#ffcc33', | |
| 39 width: 2 | |
| 40 }), | |
| 41 image: new ol.style.Circle({ | |
| 42 radius: 7, | |
| 43 fill: new ol.style.Fill({ | |
| 44 color: '#ffcc33' | |
| 45 }) | |
| 46 }) | |
| 47 }), | |
| 48 | |
| 49 _map: null, | |
| 50 | |
| 51 _olMap: null, | |
| 52 | |
| 53 _measureTooltipElement: null, | |
| 54 /** | |
| 55 * Overlay to show the measurement. | |
| 56 * | |
| 57 * @type {ol.Overlay} | |
| 58 */ | |
| 59 _measureTooltip: null, | |
| 60 | |
| 61 _pointermoveKey: null, | |
| 62 | |
| 63 _sketch: null, | |
| 64 | |
| 65 _overlays: null, | |
| 66 | |
| 67 _vector: null, | |
| 68 | |
| 69 wgs84Sphere: new ol.Sphere(6378137), | |
| 70 | |
| 71 constructor: function (options) { | |
| 72 safe.argumentNotNull(options, "options"); | |
| 73 safe.argumentNotNull(options.map, "map"); | |
| 74 | |
| 75 this._map = options.map; | |
| 76 this._olMap = options.map.olMap; | |
| 77 this._overlays = []; | |
| 78 }, | |
| 79 | |
| 80 init: function () { | |
| 81 if (this._draw) | |
| 82 return; | |
| 83 | |
| 84 var source = new ol.source.Vector(); | |
| 85 | |
| 86 this._vector = new ol.layer.Vector({ | |
| 87 source: source, | |
| 88 style: this.vectorStyle | |
| 89 }); | |
| 90 this._map.addLayer(this._vector); | |
| 91 | |
| 92 this._draw = this._createDraw(source); | |
| 93 this._draw.on('drawstart', this._onDrawStart, this); | |
| 94 this._draw.on('drawend', this._onDrawEnd, this); | |
| 95 | |
| 96 }, | |
| 97 | |
| 98 onActivating: function () { | |
| 99 this.init(); | |
| 100 | |
| 101 this._pointermoveKey = listen(this._olMap, 'pointermove', safe.delegate(this, "_onPointerMove")); | |
| 102 this._olMap.addInteraction(this._draw); | |
| 103 | |
| 104 return this.inherited(arguments); | |
| 105 }, | |
| 106 | |
| 107 onDeactivating: function () { | |
| 108 // отключаем рисование и получение сообщений | |
| 109 if (this._pointermoveKey) | |
| 110 this._pointermoveKey.remove(); | |
| 111 this._olMap.removeInteraction(this._draw); | |
| 112 | |
| 113 // если был активен инструмент | |
| 114 if (this._sketch) { | |
| 115 // убиваем подсказку и сбрасываем текущее рисование | |
| 116 this._sketch = null; | |
| 117 this._measureTooltipElement = null; | |
| 118 this._olMap.removeOverlay(this._measureTooltip); | |
| 119 } | |
| 120 | |
| 121 return this.inherited(arguments); | |
| 122 }, | |
| 123 | |
| 124 clear: function () { | |
| 125 var me = this; | |
| 126 me.log("clear"); | |
| 127 if (me._vector) { | |
| 128 me._vector.getSource().clear(); | |
| 129 me._overlays.forEach(function (x) { | |
| 130 me._olMap.removeOverlay(x); | |
| 131 }); | |
| 132 } | |
| 133 }, | |
| 134 | |
| 135 _createMeasureTooltip: function () { | |
| 136 this._measureTooltipElement = dconstruct.create("div", { | |
| 137 "class": 'tooltip poisk-measure-tooltip' | |
| 138 }); | |
| 139 this._measureTooltip = new ol.Overlay({ | |
| 140 element: this._measureTooltipElement, | |
| 141 offset: [0, -15], | |
| 142 positioning: 'bottom-center' | |
| 143 }); | |
| 144 this._olMap.addOverlay(this._measureTooltip); | |
| 145 | |
| 146 }, | |
| 147 | |
| 148 _onDrawStart: function (evt) { | |
| 149 this._sketch = evt.feature; | |
| 150 this._createMeasureTooltip(); | |
| 151 }, | |
| 152 | |
| 153 _onDrawEnd: function (evt) { | |
| 154 | |
| 155 this._measureTooltip.setOffset([0, -7]); | |
| 156 | |
| 157 dclass.remove(this._measureTooltipElement, "tooltip"); | |
| 158 dclass.add(this._measureTooltipElement, "tooltip-static"); | |
| 159 | |
| 160 this._overlays.push(this._measureTooltip); | |
| 161 | |
| 162 this._sketch = null; | |
| 163 this._measureTooltip = null; | |
| 164 this._measureTooltipElement = null; | |
| 165 }, | |
| 166 | |
| 167 _onPointerMove: function (evt) { | |
| 168 if (this._sketch && !evt.dragging) { | |
| 169 this._measureTooltip.setPosition(evt.coordinate); | |
| 170 this._measureTooltipElement.innerHTML = this._formatTooltip( | |
| 171 this._sketch, | |
| 172 this._olMap.getView().getProjection()); | |
| 173 } | |
| 174 }, | |
| 175 | |
| 176 _formatTooltip: function (sketch, proj) { | |
| 177 | |
| 178 } | |
| 179 }); | |
| 180 | |
| 181 }); |
