EgisCorp / XDWorld

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

flowpolygon setHeight 함수 오류 문의 #381

Closed giyoon99 closed 6 months ago

giyoon99 commented 8 months ago

엔진 버전 : 1.58.0

오류 발생 API : setHeight

오류 내용 : 안녕하세요!

강물 폴리곤(flowpolygon) 가시화 중 높이 조절하는 함수에서 오류가 있는 것 같아서 문의 드립니다.

image 해당 폴리곤을 생성 시 좌표 설정 코드에서 Altitude 값을 104로 지정하여 가시화 하였습니다.

그 후 setHeight 함수를 이용하여 높낮이를 조절하려는데 똑같은 104 값을 입력하면 지하로 파묻히고 400 정도는 입력해야 비슷한 높이로 올라오고 있습니다.

setHeight 함수에 입력하는 값은 단순 고도값을 입력하는 것이 아닌가요??

YunSumin commented 8 months ago

안녕하세요,

문의 주신 내용을 토대로 JSFlowPolygon의 setHeight API를 검토한 결과, 고도 재설정 시 오차가 발생하는 부분을 확인하였습니다.

현재 수정된 상태이며, 다음 엔진 업데이트에 반영될 예정입니다.

setHeight API는 기존 폴리곤 위치에서 설정한 값 만큼 수직 높이를 조정하는 offset 기능을 수행합니다. (m 단위)

중심점 고도가 10.0인 JSFlowPolygon 오브젝트가 있다고 가정했을 때, 폴리곤의 setHeight API를 10.0으로 호출하였을 경우 오브젝트의 중심 높이는 20.0으로 조정됩니다.

엔진 업데이트 시 다시 안내 드리겠습니다.

YunSumin commented 7 months ago

안녕하세요, 문의주신 현상을 수정한 엔진이 업데이트 되어 안내드립니다. https://github.com/EgisCorp/XDWorld?tab=readme-ov-file#1591-2024308

setHeight 호출 시 기존에 높이 설정 값에 오차가 생기지 않도록 수정 되었습니다. 업데이트 내용 참조 부탁드립니다.

감사합니다.

giyoon99 commented 7 months ago

안녕하세요! 업데이트된 부분 확인 했습니다

현재 작동 시 현 고도에서 상대적으로 + 되고 있는데 혹시 고도 기준으로 절대값을 적용하는 방법을 없을까요??

YunSumin commented 7 months ago

setHeight 값은 JSFlowPolygon의 중점을 기준으로 고도를 조정하고 있습니다. 중점은 JSFlowPolygon의 getCenter API로 반환되는 좌표 Altitude 값으로 조회하실 수 있습니다.

만약 폴리곤 중점이 해발고도 3.0에 위치하고, 폴리곤을 해발고도 5.0으로 이동시키고 싶으신 경우

polygon.setHeight( {목표고도} - {현재고도} ); ex) polygon.setHeight( 5.0 - 3.0 );

값으로 계산하시면 목표로 하는 고도 값으로 오프셋이 계산되어 적용됩니다.

giyoon99 commented 6 months ago

안녕하세요!

계산을 통해 적용 해보려고 시도 하였으나... getCenter 호출 시 Altitude 값이 초기에 설정한 고도와 다르게 나오고 있습니다..

현재 적용중인 폴리곤은 모든 버텍스 고도가 동일하게 적용 되어서 수평인 상태이며, 기존 고도값은 107이고 getCenter에서 나온 고도값은 385로 나오고 있습니다.

기존 설정한 고도값과 getCenter에서 나오는 Altitude 값이 다른 이유가 무엇이 있을까요??

YunSumin commented 6 months ago

확인 결과 getCenter 값이 설정한 height 값을 포함하여 반환하는 부분을 확인하였습니다.

이에 따라, 기존에 setHeight API 대신 setAltitudeOffset/getAltitudeOffset이라는 신규 API를 생성하여, getCenter 값과 분리되어 반환 가능하도록 API를 재구성하겠습니다.

금주 혹은 차주 업데이트에 반영 후 다시 말씀 드리겠습니다.

YunSumin commented 6 months ago

기능 구현 중 활용 가능하신 것으로 판단되는 API가 있어 안내 드립니다. 아래 코드는 JSFlowPolygon의 position_offset 프로퍼티를 활용한 코드입니다.

// ... (FlowPolygon 오브젝트 생성) ...
flowpolygon.position_offset = {
    altitude : 100.0
};

JSFlowPolygon의 position_offset 프로퍼티를 통해 기존 오브젝트에서 높이 값 offset을 설정하실 수 있습니다.

[Ex] 높이가 10.0으로 설정 된 오브젝트의 높이를 15.0으로 변경하고자 하는 경우

var object_altitude = flowpolygon.getCenter().altitude;
var target_altitude = 15.0;
flowpolygon.position_offset = {
    altitude : target_altitude - object_altitude    // offset 값은 5.0으로 계산
};

[Ex] 높이가 10.0으로 설정 된 오브젝트의 높이를 5.0으로 변경하고자 하는 경우

var object_altitude = flowpolygon.getCenter().altitude;
var target_altitude = 5.0;
flowpolygon.position_offset = {
    altitude : target_altitude - object_altitude    // offset 값은 -5.0으로 계산
};

position_offset 프로퍼티는 getCenter 값과 합산 되어 계산되지 않으므로 높이 값 계산 시 분리하여 적용하실 수 있습니다.

추가로 position_offset 프로퍼티를 통해 longitude, latitude offset 값도 설정 가능한 점 안내 드립니다.

flowpolygon.position_offset = {
    longitude : 0.0000008,
    latitude : 0.0000005,
    altitude : 100.0
};

position_offset 프로퍼티는 기존 엔진에 포함되어 있으므로, 위 내용은 엔진 변경 없이 바로 적용이 가능합니다.

위 프로퍼티를 활용해보신 후 해당 현상에 적용 가능한지 말씀 부탁드립니다.