2014年1月14日火曜日

33 - マウスでフィーチャを描画 5 - ポリゴン(多角形)を削除する

33-5 ポリゴン(多角形)を削除する
「geometricnet」の「OpenLayers Undo Redo Vector Edit Example(http://geometricnet.sourceforge.net/examples/undo-redo.html)」を参考に マウスで削除してみます。
(このサイトを参考に UndoRedo を試してみましたが、動作しませんでした。)
「ol014-nippon_bmi_akiruno_pgis.html」 ファイルを続けて使います。

a 上記サイトを右クリックしてソースを表示します。
b 次のように内容の一部をコピーして「ol014-nippon_bmi_akiruno_pgis.html」に貼り付け、修正します。

---
    modify: new OpenLayers.Control.ModifyFeature(vectors),
    "delete": new DeleteFeature(vectors) // 追加
   };
---
   DeleteFeature = OpenLayers.Class(OpenLayers.Control, {
    initialize: function(layer, options) {
     OpenLayers.Control.prototype.initialize.apply(this, [options]);
      this.layer = layer;
      this.handler = new OpenLayers.Handler.Feature(
       this, layer, {click: this.clickFeature}
     );
    },
    clickFeature: function(feature) {
     // if feature doesn't have a fid, destroy it
     if(feature.fid == undefined) {
      this.layer.destroyFeatures([feature]);
     } else {
      this.layer.drawFeature(feature,{display: "none"});
      this.layer.removeFeatures(feature);
      //feature.state = OpenLayers.State.DELETE;
      this.layer.events.triggerEvent("afterfeaturemodified", {feature: feature});
      //feature.renderIntent = "select";
     }
    },
    setMap: function(map) {
     this.handler.setMap(map);
     OpenLayers.Control.prototype.setMap.apply(this, arguments);
    },
    CLASS_NAME: "OpenLayers.Control.DeleteFeature"
   });
// ここまで
  </script>
 </head>
 <body onload="init()">
---
<!-- ここから追加 -->
   <li>
    <input id="deleteToggle" type="radio" name="type" value="delete" onlick="toggleControl(this);" />
    <label for="polygonToggle">delete feature</label>
   </li>
<!--  ここまで -->
  </ul>
  </div>
 <body>
</html>


クリックしたフィーチャが削除されます。
335a-olaki.png
335b-olaki.png

0 件のコメント: