回答編集履歴

2

多角形ツールについて追記②

2019/07/19 05:49

投稿

mix-peach
mix-peach

スコア1910

test CHANGED
@@ -133,3 +133,133 @@
133
133
 
134
134
 
135
135
  上記のコードだけでは、多角形を両方開いた場合に、後から開いたコントローラー側のグループに、どちらのレイヤーも追加されてしまうので、調整が必要そうでした・・・
136
+
137
+
138
+
139
+ ---
140
+
141
+
142
+
143
+ 調整してみました。
144
+
145
+ と言っても、多角形のツールバーを開いた(多角形を書き始めた)状態のまま、他のものを開いた場合に、多角形のツールバーを強制的にcancelさせる、という方法です。
146
+
147
+ 多角形のツールバーのボタン三つ目が「キャンセルボタン」ってのを前提に処理を入れたので、ツールバーそのものにカスタマイズ(出来るのかは不明ですが)した場合は、別途調整が必要だと思います。
148
+
149
+
150
+
151
+ ```javascript
152
+
153
+
154
+
155
+ var now_ctrl = false;
156
+
157
+ var ControlDrawLeft = new L.Control.Draw({
158
+
159
+ edit: {
160
+
161
+ featureGroup: featureGroup1,
162
+
163
+ poly: {
164
+
165
+ allowIntersection: false
166
+
167
+ }
168
+
169
+ },
170
+
171
+ draw: {
172
+
173
+ polygon: {
174
+
175
+ allowIntersection: false,
176
+
177
+ showArea: true
178
+
179
+ }
180
+
181
+ }
182
+
183
+ });
184
+
185
+
186
+
187
+ ControlDrawLeft._toolbars.draw.addEventListener('enable', function(){
188
+
189
+ if(now_ctrl && now_ctrl._activeMode.handler.type == 'polygon') { now_ctrl._actionButtons[2].button.click(); }
190
+
191
+ now_ctrl = this; now_ctrl.ctrl_num= 1;
192
+
193
+ });
194
+
195
+ ControlDrawLeft._toolbars.draw.addEventListener('disable', function(){ now_ctrl = false; });
196
+
197
+ var ControlDrawRight = new L.Control.Draw({
198
+
199
+ position: "topright",
200
+
201
+ edit: {
202
+
203
+ featureGroup: featureGroup2,
204
+
205
+ poly: {
206
+
207
+ allowIntersection: false
208
+
209
+ }
210
+
211
+ },
212
+
213
+ draw: {
214
+
215
+ polygon: {
216
+
217
+ allowIntersection: false,
218
+
219
+ showArea: true
220
+
221
+ }
222
+
223
+ }
224
+
225
+ });
226
+
227
+ ControlDrawRight._toolbars.draw.addEventListener('enable', function(){
228
+
229
+ if(now_ctrl && now_ctrl._activeMode.handler.type == 'polygon') { now_ctrl._actionButtons[2].button.click(); }
230
+
231
+ now_ctrl = this; now_ctrl.ctrl_num= 2;
232
+
233
+ });
234
+
235
+ ControlDrawRight._toolbars.draw.addEventListener('disable', function(){ now_ctrl = false; });
236
+
237
+
238
+
239
+ map.addControl(ControlDrawLeft);
240
+
241
+ map.addControl(ControlDrawRight);
242
+
243
+
244
+
245
+ map.on(L.Draw.Event.CREATED, function (event) {
246
+
247
+ var layer = event.layer;
248
+
249
+ if (now_ctrl.ctrl_num == 1) {
250
+
251
+ featureGroup1.addLayer(layer);
252
+
253
+ } else if ( now_ctrl.ctrl_num == 2) {
254
+
255
+ featureGroup2.addLayer(layer);
256
+
257
+ }
258
+
259
+ });
260
+
261
+ ```
262
+
263
+
264
+
265
+ そもそも。ツールバーのイベントの```this```から辿れば、親のコントローラーが見つけられるとおもうんですけどねぇ・・・どうにも簡単に取ったり判別したりする方法が見つかりませんでした。。。

1

多角形ツールについて追記

2019/07/19 05:49

投稿

mix-peach
mix-peach

スコア1910

test CHANGED
@@ -113,3 +113,23 @@
113
113
 
114
114
 
115
115
  leafletはあんまり使ったことがないので、もっと正攻法があるのでは?と思いましたが、少しでも参考になれば・・^^;
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+ ---
124
+
125
+ 追記です。
126
+
127
+
128
+
129
+ 回答を投稿してから気づきました・・!
130
+
131
+ 多角形のツールバーは、両方同時に開けるんですね;;
132
+
133
+
134
+
135
+ 上記のコードだけでは、多角形を両方開いた場合に、後から開いたコントローラー側のグループに、どちらのレイヤーも追加されてしまうので、調整が必要そうでした・・・