1) 정사영상에서 도로가 안 보이는 문제
혹시 레이어간 정렬(renderOrder) 값은 확인해 보셨나요? 문의 주신 내용으로만 본다면 렌더 순서(RenderOrder) 때문일 확률이 높습니다.
emap 레이어는 도로 컴포넌트 보다 작은 랜더오더를 가지고 있어서 도로 밑으로 출력되는거지만, 추후 추가한 정사영상은 랜더오더가 도로 컴포넌트보다 커서 덮이는 것으로 추측됩니다.
레이어간 랜더오더 값이 뒤섞이는경우 상위 랜더오더 값을 가진 레이어에 의해 하위 레이어가 가려지는 경우가 있습니다.
-
도로 기본값은 renderOrder = 50.
-
밑에 깔린 이미지 레이어들의 renderOrder가 이보다 크면 도로가 가려집니다.
-
확인법:
-
해결: layer.setRenderOrder(val)로 도로보다 낮게 잡아주면 됩니다.
정리하면:
-
transparent:true → 항상 false보다 뒤에 그림
-
transparent 같으면 → renderOrder 작은 순서대로 그림
-
도로는 50, 이미지 레이어는 생성순이 기본이라 꼬일 수 있다.
[도로 renderOrder 확인 예시 ]
const road = analy.getRoads()[0];
const roadRenderOrder = road.mesh.renderOrder;
확인후 랜더오더가 잘 설정되어있는데도 오류가 난다면 세밀한 진단을 위해 두 이미지 레이이어를 콘솔에 찍어서 프로퍼티값, 도로의 프로퍼티 값을 첨부해 다시 문의 주세요.
2) addInterval 끝나는 순간 캐치
저번에 문의하신 단일 클릭으로 생성 후 이벤트를 캐치한다와 비슷한 맥락의 문의같습니다 .
analy.addInterval(interval); analy.addArea(interval); 모두 클릭(click) 시 생성시작 더블클릭(dblclick ) 시 생성 종료입니다.
즉 analy.on("click"), func(){}); 로 생성 시작 타이밍을 알수 있고 analy.on("dblclick"), func(){}); 으로 종료되었을 시점을 알 수 있습니다.
end되고 시설물이 최종적으로 지도위에 그려졌을 딱 그 순간에 그려진 시설물 정보를 가져오고 싶다 하셨으니 아래 예시 코드를 첨부합니다.
생성된 컴포넌트들은 기본적으로 layer._componentList 배열에 생성된 순서대로 적재되고 이 배열을 layer.getComponents() 함수로 접근 가능합니다.
click시 배열의 length를 알고 있다가 dblclick 해서 end되는 시정의 length를 비교하면 새롭게 생성된 컴포넌트의 수를 알수 있고 이것은 순서대로 적재되니 _componentList 배열을 참조해 addInterval 로 새롭게 생성된 컴포넌트를 알수 있습니다.
let prevCount = 0; // end 이전 컴포넌트 수 기록
analy.on(("click"), (e)=>{ // 클릭 이벤트 등록
const layer = e.target.getLayer();
prevCount =layer.getComponents().length;
} )
analy.on(("dblclick"), (e)=>{ // 더블 클릭 이벤트 등록 (addInterval이 end되는 시점 캐치)
const layer = e.target.getLayer(); // 또는 analy.getLayer();
const allComponents = layer.getComponents(); // 전체 컴포넌트 리스트
const nowCount = allComponents.length;
const newComponentsNum = nowCount - prevCount; // end 후 생성된 컴포넌트 수
const newComponents = allComponents.slice(prevCount, nowCount); // end 후 생성된컴포넌트 리스트 추출
for (let component of newComponents) {
const name = component.name;
const id = component.id;
const instanceId = component.instanceId; // instancedComponent일때
const geoPositon = component.getPosition();
const worldPositon = component.position;
const scale = component.scale;
const rotation = component.rotation;
}
});
3) “선택 → 제거 → 재선택”에서 에러
문의하신 오류는 현재 저희쪽에서는 확인되지 않는 오류입니다. 예제 페이지를 참고해봐도 같은 문제가 재현되지 않습니다.
첨부해주신 에러 로그를 확인해 보면 _instancedMaxCount가 undefined 뜨는 건, U3dMultipleComponentLayer 에 이상이 있는 것입니다.
다음 사항을 체크해주세요 :
- analy.getLayer()로 U3dMultipleComponentLayer 가 분석모드에 연결되어 있는지 확인
- U3dMultipleComponentLayer가 확인된다면 콘솔에 찍서어 U3dMultipleComponentLayer._instancedMaxCount 프러퍼티가 존재하는지 확인
- analy.getSelected().componentLayer 로 선택한 컴포넌트가 참조하는 부모 레이어가 analy.getLayer()와 동일한지 확인
체크 사항을 확인해서 정확히 어떤 동작 어떤 상황에서 오류가 발생하는지 좀 더 자세히 설명해주세요. 현재로써는 뭐가 문제인지 파악하기가 힘듭니다.
감사합니다.
|