Openlayers - Mất lựa chọn hoặc kiểu trên vẽ lại lớp


10

Khi tôi phóng to hoặc di chuyển bản đồ, lớp của tôi được vẽ lại. Đây là những gì tôi muốn, bởi vì tôi có phân bổ các tính năng để tải cùng một lúc. Đây là mã:

    wfs = new OpenLayers.Layer.Vector("WFS", {
    strategies: [new OpenLayers.Strategy.BBOX({
                    resFactor: 1,
                    ratio:1
                })],
    protocol: new OpenLayers.Protocol.WFS({
              maxFeatures:1000,
              url:  myUrl,
              featureType: myFeatureType,
              featureNS: myFeaturedNS,
              version: "1.1.0"
              }),
      filter: setFilter(year, variant)
});

Mã sau đây là mã lựa chọn của tôi. Tất cả điều này hoạt động như tôi sẽ không. Tuy nhiên, khi lớp được vẽ lại, vùng chọn bị mất và onFeatureUnselect không được kích hoạt (mà nó nên). Tôi không chắc liệu lựa chọn có thực sự bị mất hoặc phong cách được đặt lại.

    selectCtrl = new OpenLayers.Control.SelectFeature(
        wfs,
        {
            clickout: true, toggle: false,
            multiple: false, hover: false,
            box: true,
            toggleKey: "shiftKey", // ctrl key removes from selection
            multipleKey: "shiftKey",
            eventListeners: {
                featurehighlighted: onFeatureSelect,
                featureunhighlighted: onFeatureUnselect

            }
        }
    );

@geographika

Các hàm onFeatureSelect và onFeatureUnselect của tôi:

function onFeatureSelect(e) {
var feature = e.feature.attributes;
var featureclone = e.feature.clone();

var style = {
    pointRadius: 10,
    fillOpacity:0,
    strokeColor: "#000000"
    };

featureclone.style = style;

layer2.addFeatures([featureclone]);
selectedFeatures[featureclone.attributes.receptor_id] = featureclone;
}

function onFeatureUnselect(e) {
    var feature = e.feature.attributes;
    layer2.removeFeatures(selectedFeatures[feature.receptor_id]);   
    delete selectedFeatures[feature.receptor_id];
}

Có gì trong chức năng onFeatureSelect của bạn?
geographika

Tôi đã cập nhật bài viết của mình với hai chức năng
Boedy

Câu trả lời:


4

Tôi đã tìm thấy cách dễ nhất để duy trì các lựa chọn vectơ qua thu phóng, xoay và vẽ lại là thêm một lớp vectơ trống mới vào bản đồ của bạn và khi các tính năng được chọn sẽ đặt một bản sao trong lớp này.

Bạn có thể đặt kiểu lớp chọn là kiểu có thể nhìn thấy rõ.

Trong các chức năng tô sáng công cụ đã chọn của bạn, hãy thêm một bản sao của tính năng khi chọn và xóa nó khi nó được chọn lần thứ hai.

onFeatureSelect(feat){
  //check if the feature is in the select layer
  var cloned_feat = selectionLayer.getFeatureById(feat.id); 
  //or a getFeatureBy with a unique property

  if(cloned_feat){
      selectionLayer.removeFeatures([cloned_feat]);
  }
  else {
      var featCopy = feat.clone();
      this.sketchLayer.addFeatures([featCopy]);
  }
}

Điều này được đơn giản hóa một chút (và chưa được kiểm tra) - bạn có thể sẽ muốn lưu trữ lớp chọn làm thuộc tính của công cụ chọn của mình.

Đồng thời kiểm tra hàm getFeatureById - bạn có thể phải sử dụng một thuộc tính duy nhất khác trên tính năng của mình thay vì ID.


Cảm ơn vi đa trả lơi. Tôi nghĩ rằng đây có thể là một giải pháp tốt. Tôi đang loay hoay với một số mã, nhưng tôi bị kẹt ở điểm rằng sự kiện onFeatureUnselect không kích hoạt khi lựa chọn bị mất. Vì vậy, trên sự kiện nào tôi loại bỏ các tính năng nhân bản? Xem bài viết gốc của tôi.
Boedy

@Boedy xem câu trả lời cập nhật. Bạn có thể nên làm mọi thứ trong chức năng chọn. Chọn một lần để chọn và một lần nữa để bỏ chọn.
geographika

Cảm ơn nhiều! Cheching nếu tính năng là trong lớp đã chọn giúp. Bây giờ tôi chỉ có một vấn đề về kiểu dáng, nhưng tôi cá là tôi có thể tự mình tìm ra vấn đề đó.
Boedy

0

Từ các thử nghiệm của tôi ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ) có vẻ như lựa chọn và kiểu dáng nên được duy trì trên một mức thu phóng.


Trong trường hợp của bạn, nó hoạt động. Nhưng mã của bạn không sử dụng: resFactor: 1 và tỷ lệ: 1. Điều này gây ra vẽ lại khi thu phóng được thay đổi. Ví dụ của bạn không kích hoạt vẽ lại.
Boedy

tốt, điều đó thu hẹp vấn đề cho bạn sau đó
Ian Turton
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.