Berurusan dengan fitur yang tumpang tindih di OpenLayers


14

Jika pengguna membuat fitur poligon yang sepenuhnya tumpang tindih dengan yang lain, seperti ini ...

... maka tidak mungkin Anda dapat memilih fitur bagian dalam, yaitu yang tumpang tindih dengan yang lain. Saat ini saya menggunakan yang sederhana SelectFeatureseperti ini:

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

Tapi yang jelas, saya hanya bisa mendapatkannya untuk memilih fitur luar. Apa cara khas menangani ini? Bagaimana saya bisa memungkinkan pengguna untuk memilih fitur dalam juga?

Solusi paling sederhana mungkin akan membuat fitur luar hanya dapat dipilih dalam area yang tersisa ketika mengurangi fitur dalam - tetapi saya tidak tahu bagaimana cara melakukan hal itu.


1
Anda perlu membuat indeks-z (Pemesanan) - lihat openlayers.org/dev/examples/ordering.html
Mapperz

Fiuh, jadi itu artinya saya harus memeriksa secara manual setiap kemungkinan kombinasi fitur untuk tumpang tindih dan menetapkan pesanan z khusus sebelum memuatnya? Seperti ... memiliki fungsi yang menentukan apakah satu fitur sepenuhnya terkandung dalam yang lain?
slhck

pemesanan z-index tidak berfungsi
neogeomat

Jawaban:


10

Beberapa pilihan. Beberapa lebih gila :-) dari yang lain. Strategi dasarnya adalah

  • Fitur cluster
  • Sembunyikan / pindahkan fitur teratas
  • Kirim klik melalui fitur teratas

==>

  1. Aktifkan strategi pengelompokan fitur

  2. Terapkan algoritma pengelompokan Anda sendiri, sehingga ketika item baru ditambahkan atau dimodifikasi, algoritma Anda kembali berjalan dan melakukan pemeriksaan for-loop bersarang dan n * n (-1) memeriksa untuk melihat apa yang tumpang tindih dengan apa - kemudian memodifikasi properti fitur untuk mengatur daftar fitur yang tumpang tindih, dan ketika pengguna mengklik fitur tersebut, tampilkan daftar fitur yang tumpang tindih dan minta pengguna memilih apa yang sebenarnya ingin mereka klik. Masuk akal?

  3. Alih-alih mengimplementasikan fitur on-click, hanya mengimplementasikan handler klik peta keseluruhan. Dan ketika pengguna mengklik, periksa lapisan Anda untuk setiap fitur berpotongan - dan jika ada - tampilkan pop-up orang itu, dan jika ada beberapa, tampilkan daftar prompt seperti pada # 2 di atas. Jika tidak ada yang berpotongan, abaikan saja.

  4. Terapkan opsi klik kanan untuk sementara "menyembunyikan" fitur untuk memungkinkan Anda mendapatkan akses ke fitur tersembunyi. Segera setelah yang berikutnya diklik, tampilkan kembali semua fitur yang tersembunyi

  5. Mirip dengan # 4, di dalam pop-up fitur atas, tambahkan item menu / tautan untuk "menyembunyikan" fitur. Dan lanjutkan seperti di # 4.

  6. Mirip-ish ke # 4/5 menerapkan klik kanan "langkah sementara" dan klik seret fitur keluar dari jalan [ingat itu tempat lama]. Kemudian pengguna mengklik fitur yang lebih rendah dan yang teratas muncul kembali ke posisi semula.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.