Closed yuuki9 closed 7 months ago
안녕하세요,
고스트심볼 오브젝트의 위치를 수집하여 각 위치의 고도를 서버 기반으로 반환하여 지형 결합을 적용하실 수 있습니다.
아래 영상은 여섯 개의 고스트 심볼 오브젝트를 고도 300m로 일괄 생성한 뒤 각 위치의 고도를 서버 기반으로 반환하여 결합하는 영상입니다.
https://github.com/EgisCorp/XDWorld/assets/82925313/8e663d6f-f406-407b-82f8-d54def3c6f75
아래는 고스트심볼의 고도를 반환하여 지형과 결합하는 예제 코드입니다.
function mergeTerrain() {
// 서버로 고도 값을 요청할 위치 리스트
var positions = [];
for (var i=0; i<GLOBAL.layer.getObjectCount(); i++) {
// 오브젝트의 위치 반환 후 리스트에 저장
var object = GLOBAL.layer.indexAtObject(i);
var position = object.getPosition();
positions.push(new Module.JSVector2D(position.Longitude, position.Latitude));
}
// 엔진과 연결된 지형 DEM 서버로 해당 위치의 고도 요청
Module.getTerrain().getServerAltitude({
level : 13, // 요청 DEM 레벨
positions : positions // 요청 위치 리스트
}, function (_result) {
// 서버로부터 받은 고도를 오브젝트에 적용
for (var i=0; i<_result.length; i++) {
var object = GLOBAL.layer.indexAtObject(i);
if (object != null) {
// 오브젝트의 위치 반환 후 고도만 변경
var currentPosition = object.getPosition();
currentPosition.Altitude = _result[i].altitude;
// 변경된 위치로 오브젝트 이동
object.setPosition(currentPosition);
}
}
});
}
서버로부터 반환된 좌표 리스트(_result)의 순서는 요청하는 위치 리스트(positions)의 순서와 동일하게 유지되므로 레이어의 인덱스와 1:1 매칭이 가능합니다. (고도 레벨을 너무 높게 두어 서버에 데이터가 존재하지 않는 경우 고도 값은 null로 반환되오니 참고 부탁 드립니다.)
getServerAltitude API는 1.59.0 (베타 버전의 경우 2.1.0) 버전 부터 사용 하실 수 있습니다.
엔진 버전 : 1.59.2
문의 내용 : 고스트심볼 객체에 지형결합를 적용시키는 함수가 있을까요?