annotate src/djol/MeasureToolBase.js @ 20:9718e8de0cb2

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