選択した機能を削除するOpenlayers 3


8

openlayers 3を使用して、ユーザーがマップにLineString機能を描画できるWebアプリケーションを作成しています。これはコードです:

var raster = new ol.layer.Tile({
source: new ol.source.MapQuest({ layer: 'sat' })
});


var source = new ol.source.Vector();

var vector = new ol.layer.Vector({
    name: 'my_vectorlayer',
    source: source,
    style: new ol.style.Style({
        stroke: new ol.style.Stroke({
            color: '#ffcc33',
            width: 5
        })
    })
});

var map = new ol.Map({
    layers: [raster, vector],
    target: document.getElementById('map'),
    view: new ol.View2D({
        center: [-11000000, 4600000],
        zoom: 4
    })

});
var draw;
function addInteraction() {
 map.removeInteraction(singleClick);
    draw = new ol.interaction.Draw({
        source: source,
        type: ("LineString")
    });
    map.addInteraction(draw);
}

前のコードでは、マップに線を引くことができます。描かれた線がvectorレイヤーに追加され ます。ユーザーが彼が描いた線の1つを選択しても、それらを削除することはできません。これは機能を選択するコードです:

var singleClick = new ol.interaction.Select();
function addSelect() {
    map.removeInteraction(draw);
    map.addInteraction(singleClick);
}

そしてそれは非常に意志のある仕事です、 ここに画像の説明を入力してください

ユーザーが選択したラインストリングを削除できるようにしたいだけです...


こんにちは、私はここで質問を編集します
アーメドアブドエルモニエム

回答:


9

はい、選択した機能を削除できます。

var draw;
var featureID = 0;
var singleClick;
var selectedFeatureID;

// First some change in this function.

function addInteraction() {
   map.removeInteraction(singleClick);

      draw = new ol.interaction.Draw({
      source: source,
      type: ("LineString")
  });

 // Create drawend event of feature and set ID to feature

  draw.on('drawend', function (event) {
    featureID = featureID + 1;
    event.feature.setProperties({
        'id': featureID
    })
 })
   map.addInteraction(draw);
 }

次に、以下のように選択関数を変更します。

 function addSelect() {
    map.removeInteraction(draw);
    singleClick = new ol.interaction.Select();
    map.addInteraction(singleClick);

     singleClick .getFeatures().on('add', function (event) {
     var properties = event.element.getProperties();
     selectedFeatureID = properties.id;       
    });
 }

次に、REMOVEボタンをクリックしてこの関数を呼び出します。

 function removeSelectedFeature() {
   var features = source.getFeatures();
     if (features != null && features.length > 0) {
         for (x in features) {
            var properties = features[x].getProperties();
            console.log(properties);
            var id = properties.id;
            if (id == selectedFeatureID) {
              source.removeFeature(features[x]);
               break;
            }
          }
        }
      }

このコードを使用すると、選択した機能を削除できます。Line、Point、Polygonなどの場合


3
機能IDを設定しfeature.setId(id)て取得する必要がありますfeature.getId()
Jonatas Walker

0

まず、もう少し詳しく教えていただければ、私はあなたの質問への回答をよりよく支援できます。私はあなたが尋ねていることを完全に理解しているとは思いません。ここにいくつかの可能性があります。

1)シンプルだが限られた解決策は、レイヤースイッチャーを使用することです。このようなもの。geoserverのようなwmsを使用していると仮定すると、SQLのようなビューを使用して、追加または削除できる一連のレイヤーを作成できます。このような簡単なことをする必要がある場合は、回答を編集して詳細を提供できます。

2)これまでに行ったことはありませんが、調査する必要があるかもしれません。基本的に、機能の選択と削除にはol.format.wfsを使用します。


私はプロジェクトの他のレベルで最初のソリューションを必要とするので、詳細を提供するとすばらしいでしょう:)
Ahmed Abd Elmoniem 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.