EgisCorp / XDWorld

WebGL 기반 3D GIS 엔진
15 stars 7 forks source link

타일링된 레이어에 속해 있는 오브젝트 중 일부만 가시화하는 방법 #274

Closed KIMSEONOK closed 1 year ago

KIMSEONOK commented 1 year ago

엔진 버전 : 1.45.0 문의 내용 : 안녕하세요.

타일링된 건물 레이어를 호출한 뒤, 지도 상에 위치를 선택 했을 때 해당 필지에 포함되는 건물만 띄우도록 하는 기능을 구현하려 합니다.

처음에는 object의 setVisible 기능을 이용해보려 하였으나, 줌 인/아웃을 하게 되면 고도값에 따라 레이어를 새로 호출해서 그런지 처음 상태로 돌아가게 됩니다.

선택한 필지에 해당하는 건물의 오브젝트 키를 모두 알 수 있고, 전체 건물 객체 수가 8만개 정도 될 때 해당 기능을 구현하는 데 사용할 수 있는 API가 있을까요?

YangHeeBong commented 1 year ago

네 안녕하세요. 현재 이슈에 대해서 답변드리겠습니다

특정 건물 객체에 대한 가시화 여부 지정은 다음 기능으로 처리가 가능합니다.

let buildList = [];
buildList.push("색상변경 건물오브젝트_1");
buildList.push("색상변경 건물오브젝트_2");

let layerList = new Module.JSLayerList(false);
let layer = layerList.nameAtLayer("해당 건물레이어 명칭");
layer.setObjectColorListByKey(0, new Module.JSColor(0, 0, 0, 0), buildList);  // 투명처리 or
//layer.setObjectColorListByKey(0, new Module.JSColor(255, 255, 0, 0), buildList);  // 붉은색
//layer.setObjectColorListByKey(0, new Module.JSColor(255, 255, 255, 255), buildList);  // 원본색상

위 코드를 통해 다음과 같은 결과를 얻을 수 있습니다. 투명처리 <투명 처리> 붉은색 처리 <붉은색 처리>

setObjectColorListByKey을 통해 XDO Road 및 현재화면 기준 가시화된 오브젝트 목록과 Array(String)입력 값과 해당 오브젝트 키값을 비교하여 색상을 변경합니다.

이 기능을 통해 질문하신 기능 구현은 가능하지만 가장 크게 2가지 문제점이 발생합니다.

위 문제를 정확하게 해결하기 위해서는 조건에 맞는 건물 데이터를 새로 작성하여 레이어별로 가시화 여무를 설정하셔야 합니다.

KIMSEONOK commented 1 year ago

확인했습니다! 감사합니다.