Xóa tính năng đã chọn Openlayers 3


8

Tôi đang sử dụng openlayers 3 để tạo ứng dụng web cho phép người dùng vẽ các tính năng LineString trên bản đồ. đây là mã

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);
}

bởi đoạn mã trước tôi có thể nhúng các dòng vào bản đồ. các đường được vẽ sẽ được thêm vào vectorlớp. Tôi sẽ không khi người dùng chọn một trong những dòng mà anh ta vẽ có thể loại bỏ chúng. đây là mã chọn tính năng:

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

và nó hoạt động rất sẽ, nhập mô tả hình ảnh ở đây

Tôi chỉ muốn người dùng có thể xóa LineString đã chọn ...


Xin chào, tôi chỉnh sửa câu hỏi trên đó
Ahmed Abd Elmoniem

Câu trả lời:


9

Có, bạn có thể loại bỏ tính năng được chọn.

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);
 }

Sau đó thay đổi trong chức năng chọn như sau:

 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;       
    });
 }

Sau đó gọi chức năng này trên nút XÓA

 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;
            }
          }
        }
      }

Với mã này, bạn có thể loại bỏ bất kỳ tính năng được chọn. Nếu đó là Line, Point, Polygon, v.v.


3
Bạn nên đặt id tính năng với feature.setId(id)và nhận vớifeature.getId()
Jonatas Walker

0

Đầu tiên, nếu bạn có thể cho tôi thêm một số chi tiết, tôi có thể giúp bạn trả lời câu hỏi của bạn tốt hơn. Tôi không nghĩ rằng tôi hoàn toàn hiểu những gì bạn đang hỏi. Dưới đây là một vài khả năng.

1) Giải pháp đơn giản nhưng hạn chế chỉ là sử dụng trình chuyển đổi lớp. Một cái gì đó như thế này . Giả sử bạn đang sử dụng một wms như geoserver, bạn có thể sử dụng các khung nhìn giống như SQL để tạo ra một loạt các lớp bạn có thể thêm hoặc xóa. Nếu bạn cần làm một cái gì đó đơn giản như thế này, tôi có thể chỉnh sửa câu trả lời để cung cấp thêm chi tiết.

2) Tôi đã không làm điều này trước đây, nhưng điều này có thể là một cái gì đó để nhìn vào . Về cơ bản, bạn sẽ sử dụng ol.format.wfs để chọn và xóa các tính năng.


Tôi sẽ cần giải pháp đầu tiên ở cấp độ khác trong dự án của mình, vì vậy nếu bạn cung cấp một số chi tiết thì sẽ rất tuyệt :)
Ahmed Abd Elmoniem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.