ツールバーのイベントに処理を追加して「今操作している方」を変数で保持させることで、どちらのコントローラーかを識別することならばできましたよ。
javascript
1
2//前半部分は割愛★
3
4 var now_ctrl = 0;
5
6 var ControlDrawLeft = new L.Control.Draw({
7 edit: {
8 featureGroup: featureGroup1,
9 poly: {
10 allowIntersection: false
11 }
12 },
13 draw: {
14 polygon: {
15 allowIntersection: false,
16 showArea: true
17 }
18 }
19 });
20 //左側のツールバーにイベントを追加
21 ControlDrawLeft._toolbars.draw.addEventListener('enable', function(){ now_ctrl = 1; });
22
23 var ControlDrawRight = new L.Control.Draw({
24 position: "topright",
25 edit: {
26 featureGroup: featureGroup2,
27 poly: {
28 allowIntersection: false
29 }
30 },
31 draw: {
32 polygon: {
33 allowIntersection: false,
34 showArea: true
35 }
36 }
37 });
38 //右側のツールバーにイベントを追加
39 ControlDrawRight._toolbars.draw.addEventListener('enable', function(){ now_ctrl = 2; });
40
41 map.addControl(ControlDrawLeft);
42 map.addControl(ControlDrawRight);
43
44 map.on(L.Draw.Event.CREATED, function (event) {
45 var layer = event.layer;
46 if (now_ctrl == 1) {
47 featureGroup1.addLayer(layer);
48 } else if ( now_ctrl == 2) {
49 featureGroup2.addLayer(layer);
50 }
51 });
52
leafletはあんまり使ったことがないので、もっと正攻法があるのでは?と思いましたが、少しでも参考になれば・・^^;
追記です。
回答を投稿してから気づきました・・!
多角形のツールバーは、両方同時に開けるんですね;;
上記のコードだけでは、多角形を両方開いた場合に、後から開いたコントローラー側のグループに、どちらのレイヤーも追加されてしまうので、調整が必要そうでした・・・
調整してみました。
と言っても、多角形のツールバーを開いた(多角形を書き始めた)状態のまま、他のものを開いた場合に、多角形のツールバーを強制的にcancelさせる、という方法です。
多角形のツールバーのボタン三つ目が「キャンセルボタン」ってのを前提に処理を入れたので、ツールバーそのものにカスタマイズ(出来るのかは不明ですが)した場合は、別途調整が必要だと思います。
javascript
1
2 var now_ctrl = false;
3 var ControlDrawLeft = new L.Control.Draw({
4 edit: {
5 featureGroup: featureGroup1,
6 poly: {
7 allowIntersection: false
8 }
9 },
10 draw: {
11 polygon: {
12 allowIntersection: false,
13 showArea: true
14 }
15 }
16 });
17
18 ControlDrawLeft._toolbars.draw.addEventListener('enable', function(){
19 if(now_ctrl && now_ctrl._activeMode.handler.type == 'polygon') { now_ctrl._actionButtons[2].button.click(); }
20 now_ctrl = this; now_ctrl.ctrl_num= 1;
21 });
22 ControlDrawLeft._toolbars.draw.addEventListener('disable', function(){ now_ctrl = false; });
23 var ControlDrawRight = new L.Control.Draw({
24 position: "topright",
25 edit: {
26 featureGroup: featureGroup2,
27 poly: {
28 allowIntersection: false
29 }
30 },
31 draw: {
32 polygon: {
33 allowIntersection: false,
34 showArea: true
35 }
36 }
37 });
38 ControlDrawRight._toolbars.draw.addEventListener('enable', function(){
39 if(now_ctrl && now_ctrl._activeMode.handler.type == 'polygon') { now_ctrl._actionButtons[2].button.click(); }
40 now_ctrl = this; now_ctrl.ctrl_num= 2;
41 });
42 ControlDrawRight._toolbars.draw.addEventListener('disable', function(){ now_ctrl = false; });
43
44 map.addControl(ControlDrawLeft);
45 map.addControl(ControlDrawRight);
46
47 map.on(L.Draw.Event.CREATED, function (event) {
48 var layer = event.layer;
49 if (now_ctrl.ctrl_num == 1) {
50 featureGroup1.addLayer(layer);
51 } else if ( now_ctrl.ctrl_num == 2) {
52 featureGroup2.addLayer(layer);
53 }
54 });
そもそも。ツールバーのイベントのthis
から辿れば、親のコントローラーが見つけられるとおもうんですけどねぇ・・・どうにも簡単に取ったり判別したりする方法が見つかりませんでした。。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/19 14:43
2019/07/22 02:06
2019/07/22 05:21