การจัดการกับคุณสมบัติที่ทับซ้อนกันใน OpenLayers


14

หากผู้ใช้สร้างคุณลักษณะรูปหลายเหลี่ยมที่ทับซ้อนกันอย่างสมบูรณ์เช่นนี้ ...

…ถ้าอย่างนั้นคุณก็ไม่สามารถเลือกคุณลักษณะภายในได้เช่นตัวที่ซ้อนทับกัน ฉันกำลังใช้งานง่าย ๆSelectFeatureเช่นนี้:

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

แต่เห็นได้ชัดว่าฉันทำได้แค่เลือกคุณลักษณะด้านนอกเท่านั้น วิธีการทั่วไปในการจัดการกับสิ่งนี้คืออะไร? ฉันจะทำให้ผู้ใช้สามารถเลือกคุณสมบัติภายในได้อย่างไร

วิธีแก้ปัญหาที่ง่ายที่สุดอาจจะทำให้คุณสมบัติด้านนอกสามารถเลือกได้เฉพาะภายในพื้นที่ที่เหลือเมื่อลบคุณลักษณะภายใน - แต่ฉันไม่รู้ว่าจะทำอย่างไร


1
คุณต้องสร้างดัชนี z (การสั่งซื้อ) - ดูopenlayers.org/dev/examples/ordering.html
Mapperz

วุ๊ยนั่นหมายความว่าฉันต้องตรวจสอบทุกครั้งที่มีการรวมกันของคุณสมบัติสำหรับการซ้อนทับและกำหนดลำดับ z ที่กำหนดเองก่อนที่จะโหลด? กดชอบ…มีฟังก์ชั่นที่กำหนดว่ามีฟีเจอร์หนึ่งที่บรรจุอยู่ภายในอีกฟีเจอร์หนึ่งหรือไม่?
slhck

การสั่งซื้อดัชนี z ไม่ทำงาน
neogeomat

คำตอบ:


10

ตัวเลือกน้อย บางคนบ้าคลั่ง :-) กว่าคนอื่น กลยุทธ์พื้นฐานคือ

  • คุณสมบัติของคลัสเตอร์
  • ซ่อน / ย้ายคุณสมบัติด้านบน
  • ส่งคลิกผ่านคุณสมบัติยอดนิยม

==>

  1. เปิดกลยุทธ์การจัดกลุ่มคุณลักษณะ

  2. ใช้อัลกอริทึมการจัดกลุ่มของคุณเองดังนั้นเมื่อมีการเพิ่มหรือแก้ไขไอเท็มใหม่อัลกอริทึมของคุณจะรันอีกครั้งและทำการตรวจสอบแบบวนซ้ำแบบวนรอบและการตรวจสอบ n * n (-1) เพื่อดูว่าทับซ้อนกับอะไร เพื่อตั้งค่ารายการคุณลักษณะที่ทับซ้อนกันและเมื่อผู้ใช้คลิกที่คุณสมบัติให้แสดงรายการคุณลักษณะที่ทับซ้อนกันและให้ผู้ใช้เลือกสิ่งที่ต้องการคลิก มีเหตุผล?

  3. แทนที่จะใช้คุณลักษณะการคลิกเพียงแค่ใช้ตัวจัดการการคลิกแผนที่ทั้งหมด และเมื่อผู้ใช้คลิกตรวจสอบเลเยอร์ของคุณสำหรับคุณสมบัติการตัดกัน - และถ้ามี - แสดงป๊อปอัพของผู้ชายคนนั้นและถ้ามีหลายให้แสดงรายการพร้อมท์เช่นใน # 2 ข้างต้น หากไม่มีจุดตัดให้ละเว้น

  4. ใช้ตัวเลือกคลิกขวาเพื่อ "ซ่อน" คุณสมบัติชั่วคราวเพื่อให้คุณเข้าถึงคุณลักษณะที่ซ่อนอยู่ ทันทีที่คลิกถัดไปจะแสดงคุณสมบัติที่ซ่อนอยู่ทั้งหมดอีกครั้ง

  5. เช่นเดียวกับ # 4 ภายในป๊อปอัปของสถานที่ยอดนิยมเพิ่มรายการเมนู / ลิงก์เพื่อ "ซ่อน" สถานที่ และดำเนินการต่อใน # 4

  6. คล้ายกันกับ # 4/5 ใช้คลิกขวา "ย้ายชั่วคราว" และคลิกลากคุณลักษณะออกไปให้พ้น [จำได้ว่ามันเป็นจุดเก่า] จากนั้นผู้ใช้คลิกที่คุณสมบัติที่ต่ำกว่าและด้านบนหนึ่งกลับไปที่ตำแหน่งเดิม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.