ラベル Custom Editing Toolbar の投稿を表示しています。 すべての投稿を表示
ラベル Custom Editing Toolbar の投稿を表示しています。 すべての投稿を表示

2014年1月21日火曜日

34 - 編集ツールバー(Editing Toolbar) 5 - 削除ボタンを追加

34-5 Editing Toolbar に削除ボタンを追加する
「ol015-nippon_bmi_akiruno_pgis.html」 ファイルを続けて使います。
削除ボタンは次のようなものを作成して、"OpenLayers-2.13.1/theme/default/img/ に保存しました。


remove_feature_on.png

remove_feature_off.png


<style> に削除ボタンのスタイルを追加

---
// ここから追加
 .olControlDeleteFeatureItemActive { 
  background-image: url(OpenLayers-2.13.1/theme/default/img/remove_feature_on.png);
  background-repeat: no-repeat;
  background-position: 0px 1px;
 }
 .olControlDeleteFeatureItemInactive { 
  background-image: url(OpenLayers-2.13.1/theme/default/img/remove_feature_off.png);
  background-repeat: no-repeat;
  background-position: 0px 1px;
 }
// ここまで
---

削除ボタンのコードを追加

---
     new OpenLayers.Control.ModifyFeature(vectors,{
       title: "Modify Feature",
         displayClass: "olControlModifyFeature"
     }),
// ここから追加
     new DeleteFeature(vectors,{
       title: "Remove Feature",
         displayClass: "olControlDeleteFeature"
     }),
// ここまで
     new OpenLayers.Control.SelectFeature(
---
   map.zoomToMaxExtent();
  }
// ここから追加
  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>
---











参考 HTML ファイル
ol015-nippon_bmi_akiruno_pgis.html

34 - 編集ツールバー(Editing Toolbar) 4 - 変形ボタンを追加

34-4 Editing Toolbar に変形ボタンを追加する
「ol015-nippon_bmi_akiruno_pgis.html」 ファイルを続けて使います。
変形ボタンは次のようなものを作成して、"OpenLayers-2.13.1/theme/default/img/ に保存しました。


modify_feature_on.png

modify_feature_off.png


<style> に変形ボタンのスタイルを追加

---
// ここから追加
 .olControlModifyFeatureItemActive { 
  background-image: url(OpenLayers-2.13.1/theme/default/img/modify_feature_on.png);
  background-repeat: no-repeat;
  background-position: 0px 1px;
 }
 .olControlModifyFeatureItemInactive { 
  background-image: url(OpenLayers-2.13.1/theme/default/img/modify_feature_off.png);
  background-repeat: no-repeat;
  background-position: 0px 1px;
 }
// ここまで
---

移動ボタンのコードを追加

---
  new OpenLayers.Control.DragFeature(
   vectors,
   {
   title: "Drag Feature",
   displayClass: 'olControlDragFeature'
  }),
// ここから追加
  new OpenLayers.Control.ModifyFeature(vectors,{
   title: "Modify Feature",
   displayClass: "olControlModifyFeature"
  }),
// ここまで
  new OpenLayers.Control.SelectFeature(
---

34 - 編集ツールバー(Editing Toolbar) 3 - 移動ボタンを追加

34-3 Editing Toolbar に移動ボタンを追加する
「ol015-nippon_bmi_akiruno_pgis.html」 ファイルを続けて使います。
移動ボタンは次のようなものを作成して、"OpenLayers-2.13.1/theme/default/img/ に保存しました。


drag_feature_on.png

drag_feature_off.png


<style> に移動ボタンのスタイルを追加

--
// ここから追加
 .olControlDragFeatureItemActive { 
  background-image: url(OpenLayers-2.13.1/theme/default/img/   drag_feature_on.png);
  background-repeat: no-repeat;
  background-position: 0px 1px;
 }
 .olControlDragFeatureItemInactive { 
  background-image: url(OpenLayers-2.13.1/theme/default/img/drag_feature_off.png);
  background-repeat: no-repeat;
  background-position: 0px 1px;
 }
// ここまで
---

移動ボタンのコードを追加

---
   new OpenLayers.Control.DrawFeature(
    vectors,
    OpenLayers.Handler.Polygon,
    {
     title: "Draw Polygon",
     displayClass: 'olControlDrawFeaturePolygon',
     multi: true
   }),
// ここから追加
   new OpenLayers.Control.DragFeature(
    vectors,
    {
     title: "Drag Feature",
     displayClass: 'olControlDragFeature'
   }),
// ここまで
   new OpenLayers.Control.SelectFeature(
---


34 - 編集ツールバー(Editing Toolbar) 2 - 選択ボタンを追加

34-2 Editing Toolbar に選択ボタンを追加する「ol015-nippon_bmi_akiruno_pgis.html」 ファイルを続けて使います。
OpenLayers の Development Examples の「Editing Toolbar Example(http://openlayers.org/dev/examples/editingtoolbar.html)」と OpenLayers の

「Control」ページ
http://docs.openlayers.org/library/controls.html

の「Customizing an Existing Panel」を参考に Editing Toolbar に選択ボタンを追加してみます。

---
   map = new OpenLayers.Map('map', {
    projection: new OpenLayers.Projection("EPSG:2451"),
    displayProjection: new OpenLayers.Projection("EPSG:4326"),
    maxResolution: 'auto',
    units: 'meters',
    maxExtent: new OpenLayers.Bounds(-63100,-34500,-45400,-24200),
    controls: [
     new OpenLayers.Control.PanZoom(),
//   new OpenLayers.Control.EditingToolbar(vectors ), 削除
     new OpenLayers.Control.LayerSwitcher(),
     new OpenLayers.Control.MousePosition()
    ]
   });
   map.addLayers([layer0, layer3, layer1, layer2, layer4, vectors]);
// ここから追加
   var panel = new OpenLayers.Control.Panel({
    displayClass: 'customEditingToolbar',
    allowDepress: true
    // "OpenLayers.Control.TYPE_TOOL" が "true" のとき "on" のアイコンをクリックすると "off" になる
   });
// ボタンを1つずつ設定しないと配置がうまくできませんでした
   panelCrontrol = [
    new OpenLayers.Control.Navigation(
     {
      title: "Navigation"
       // ポインタをボタンに重ねたときには浮き出して表示
     }),
),
    new OpenLayers.Control.DrawFeature(
     vectors,
     OpenLayers.Handler.Point,
     {
      multi: true,
       // レイヤに渡す前に feature をマルチタイプジオメトリに型変換
      displayClass: 'olControlDrawFeaturePoint' // アイコンの設定
    }),
    new OpenLayers.Control.DrawFeature(
     vectors,
     OpenLayers.Handler.Path,
     {
      multi: true,
      displayClass: 'olControlDrawFeaturePath'
    }),
    new OpenLayers.Control.DrawFeature(
     vectors,
     OpenLayers.Handler.Polygon,
     {
      multi: true,
      displayClass: 'olControlDrawFeaturePolygon'
    }),
    new OpenLayers.Control.SelectFeature(
     vectors,
     {
      clickout: false, toggle: false,
      multiple: false, hover: false,
      toggleKey: "ctrlKey", // ctrl key removes from selection
      multipleKey: "shiftKey", // shift key adds to selection
      box: true,
      displayClass: 'olControlSelectFeature'
    })
   ]; 
   panel.addControls(panelControl);
   map.addControl(panel);
// ここまで

   map.zoomToMaxExtent();
  }
 </script>
</head>
---

「displayClass」は、style を設定してアイコンを指定します。内容は "OpenLayers-2.13.1/theme/default/style.css" をコピーしました。
選択ボタンは次のようなものを作成して、"OpenLayers-2.13.1/theme/default/img/ に保存しました。

select_feature_on.png
select_feature_off.png

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <link rel="stylesheet" href="OpenLayers-2.13.1/theme/default/style.css" type="text/css">
  <link rel="stylesheet" href="OpenLayers-2.13.1/examples/style.css" type="text/css">
<!-- ここから追加 -->
  <style>
   .customEditingToolbar {
    float: right;
    right: 0px;
    height: 30px; 
   }
   .customEditingToolbar div {
    float: right;
    margin: 5px;
    width: 24px;
    height: 24px;
   }
   .olControlNavigationItemActive { 
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -103px -23px; 
   }
   .olControlNavigationItemInactive { 
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -103px -0px; 
   }
  .olControlDrawFeaturePointItemInactive {
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -77px -1px;
   }
  .olControlDrawFeaturePointItemActive {
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -77px -24px;
   }
  .olControlDrawFeaturePathItemInactive {
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -51px -1px;
   }
  .olControlDrawFeaturePathItemActive {
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -51px -24px;
   }
   .olControlDrawFeaturePolygonItemInactive { 
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -26px 0px; 
   }
   .olControlDrawFeaturePolygonItemActive { 
    background-image: url("OpenLayers-2.13.1/theme/default/img/editing_tool_bar.png");
    background-repeat: no-repeat;
    background-position: -26px -23px;
   }
   .olControlSelectFeatureItemActive {
    background-image: url(OpenLayers-2.13.1/theme/default/img/select_feature_on.png);
    background-repeat: no-repeat;
    background-position: 0 1px;
   }
   .olControlSelectFeatureItemInactive {
    background-image: url(OpenLayers-2.13.1/theme/default/img/select_feature_off.png);
    background-repeat: no-repeat;
    background-position: 0 1px;
   }
  </style>
<!-- ここまで -->
---