Xử lý các tính năng chồng chéo trong OpenLayers


14

Nếu người dùng tạo một tính năng đa giác chồng lấp hoàn toàn một tính năng khác, như thế này

Sau đó, không có cách nào bạn có thể chọn tính năng bên trong, tức là tính năng bị chồng chéo bởi tính năng khác. Tôi hiện đang sử dụng một đơn giản SelectFeaturenhư thế này:

var select = new OpenLayers.Control.SelectFeature(
  [this.annotationLayer, this.controlPointsLayer], { 
    hover: true,
    renderIntent: "temporary"
    }
);
this.map.addControl(select);
select.activate();

Nhưng rõ ràng, tôi chỉ có thể lấy nó để chọn tính năng bên ngoài. Cách điển hình để đối phó với điều này là gì? Làm cách nào để người dùng có thể chọn tính năng bên trong?

Giải pháp đơn giản nhất có lẽ là làm cho tính năng bên ngoài chỉ có thể chọn trong khu vực còn lại khi trừ tính năng bên trong - nhưng tôi không biết làm thế nào để thực hiện điều đó.


1
Bạn cần tạo chỉ mục z (Đặt hàng) - xem openlayers.org/dev/examples/ordering.html
Mapperz

Phew, vì vậy điều đó có nghĩa là tôi phải kiểm tra thủ công mọi sự kết hợp có thể của các tính năng để chồng chéo và chỉ định thứ tự z tùy chỉnh trước khi tải chúng? Giống như có một chức năng xác định xem một tính năng có được chứa hoàn toàn trong một tính năng khác không?
slhck

thứ tự z-index không hoạt động
neogeomat

Câu trả lời:


10

Ít lựa chọn. Một số crazier :-) hơn những người khác. Các chiến lược cơ bản là

  • Tính năng cụm
  • Ẩn / di chuyển tính năng hàng đầu
  • Gửi nhấp qua tính năng hàng đầu

==>

  1. Bật chiến lược phân cụm tính năng

  2. Thực hiện thuật toán phân cụm của riêng bạn, vì vậy khi một mục mới được thêm hoặc sửa đổi, thuật toán của bạn sẽ chạy lại và thực hiện kiểm tra vòng lặp lồng nhau và kiểm tra n * n (-1) để xem những gì trùng lặp với những gì - sau đó sửa đổi thuộc tính tính năng để thiết lập danh sách các tính năng chồng lấp và khi người dùng Nhấp vào tính năng này, hãy hiển thị danh sách các tính năng chồng lấp và yêu cầu người dùng chọn những gì họ thực sự muốn nhấp vào. Có ý nghĩa?

  3. Thay vì thực hiện tính năng khi nhấp, chỉ cần thực hiện trình xử lý nhấp chuột toàn bản đồ. Và khi người dùng nhấp vào, hãy kiểm tra lớp của bạn xem có bất kỳ tính năng giao nhau nào không - và nếu có một tính năng - hiển thị cửa sổ bật lên của anh chàng đó và nếu có nhiều, hãy hiển thị danh sách nhắc như trong # 2 ở trên. Nếu không có giao nhau, chỉ cần bỏ qua.

  4. Thực hiện tùy chọn nhấp chuột phải để tạm thời "ẩn" một tính năng để cho phép bạn truy cập vào tính năng ẩn. Ngay sau khi nhấp vào cái tiếp theo, hiển thị lại tất cả các tính năng ẩn

  5. Tương tự như số 4, bên trong cửa sổ bật lên của tính năng hàng đầu, hãy thêm một mục menu / liên kết để "ẩn" tính năng. Và tiến hành như trong # 4.

  6. Tương tự-ish với # 4/5 thực hiện nhấp chuột phải "di chuyển tạm thời" và nhấp vào kéo tính năng ra khỏi đường [nhớ vị trí cũ]. Sau đó, người dùng nhấp vào tính năng thấp hơn và đầu trang sẽ quay trở lại vị trí ban đầu.

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.