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. 자체 클러스터링 알고리즘을 구현하여 새 항목을 추가하거나 수정하면 알고리즘이 다시 실행되고 중첩 된 for-loop 검사를 수행하고 n * n (-1)은 무엇과 겹치는 지 확인한 다음 feature 속성을 수정합니다. 겹치는 기능 목록을 설정하고 사용자가 기능을 클릭하면 겹치는 기능 목록을 표시하고 사용자가 실제로 클릭하려는 항목을 선택하게합니다. 말이된다?

  3. 클릭시 기능을 구현하는 대신 전체지도 클릭 핸들러를 구현하면됩니다. 사용자가 클릭하면 레이어를 통해 교차 기능이 있는지 확인하고 하나가 있다면 그 사람의 팝업을 표시하고 여러 개가 있으면 위의 # 2와 같은 프롬프트 목록을 표시하십시오. 교차하지 않는 경우 무시하십시오.

  4. 마우스 오른쪽 버튼 클릭 옵션을 구현하여 기능을 일시적으로 "숨겨서"숨겨진 기능에 액세스 할 수 있습니다. 다음을 클릭하자마자 숨겨진 모든 기능을 다시 표시하십시오.

  5. # 4와 마찬가지로 최상위 기능 팝업 내에서 메뉴 / 링크 항목을 추가하여 기능을 "숨 깁니다". 그리고 # 4 에서처럼 진행하십시오.

  6. # 4 / 5와 유사하게 마우스 오른쪽 버튼으로 클릭 한 "임시 이동"을 구현하고 클릭하여 피처를 끌어냅니다 (오래된 지점 기억). 그런 다음 사용자가 하단 기능을 클릭하면 상단 기능이 원래 위치로 돌아갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.