EgisCorp / XDWorld

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

wfs 레이어 가시거리 조절 #438

Open HyeonbinLee opened 3 weeks ago

HyeonbinLee commented 3 weeks ago

엔진 버전 : 2.7.1

문의 내용 : 안녕하세요 https://sandbox.egiscloud.com/code/main.do?id=layer_wfs

layer = Module.getTileLayerList().createXDServerLayer({
        url : 'http://0.0.0.0',     // not use
        servername : "",            // not use
        name : 'WorldBoundry_poly',
        type : 23,
        minLevel : 1,       // set Level
        maxLevel : 17       // set Level
    });

wfs 레이어를 사용 했을때 minLevel, maxLevel를 수정 하여도 설정 값으로 가시거리 적용이 되지 않습니다 혹시 가시거리를 조절할 수 있는 방법이 따로 없는걸까요?

avamk2 commented 3 weeks ago

안녕하세요 해당 기능에 대해서 이야기 드리면

커스텀 타일레이어 기반으로 동작하는 특징은 지구전체를 커버하는 XDWorld 타일셋에서 현재 화면에 시각화에 필요한 타일에 대한 정보만 외부로 제공합니다.

타일의 정보는 타일셋의 level, idx, idy에 대한 타일 정보와 해당 타일의 bbox - 최소 경위도, 최대 경위도 값이 반환되어 실제로는 bbox의 범위정보를 wfs 쿼리 공간정보로 넣게 됩니다.

타일셋의 가시범위는 레이어의 가시범위 셋팅 (minDistance, maxDistance)가 적용되는 것이 아닌 Level의 값에 의한 커버리지 범위로 동작합니다.

커스텀 타일레이어의 동작방식은

  1. 지정된 min, max Level 범위내에 화면이동이 되면 callback 함수를 호출합니다.
  2. callback 인자에서 level과 bbox를 가지고 표출 수준 및 데이터 범위를 외부 소스에 쿼리하여 가져옵니다.
  3. 외부에서 가져와진 데이터를 XDWorld Object API를 사용하여 원하는 2D 또는 3D 객체로 제작합니다. 단 기존에 레이어 추가하는 방식이 아닙니다.
  4. 커스텀 타일레이어에 callback 인자로 나온 타일정보와 API를 통해 만든 객체를 함께 사용하는 객체 추가 API로 담아줍니다.
  5. 해당 타일내에 모든 데이터를 처리하였다면 setTileInObjectEnd() API를 통해서 타일처리 완료를 설정해야 엔진에서는 해당 타일에 대한 Lock이 풀리게 되어서 메모리관리가 들어갑니다.

시야 범위는 Level에서 분명히 제어는 되지만 Level 범위에 데이터를 쿼리할때 반환해 주는지? 입력한 데이터가 Level 범위보다 매우 작은 3D 모델링인지? 여러가지 이유로 보이지 않을 수 있습니다.

주의 사항은 Level이 1에 가까울수록 bbox의 범위가 매우 커지기 때문에 요청 및 처리되는 데이터의 양이 매우 많아져서 커스텀타일 레이어에 갖는 최대 장점인 메모리 관리기능과 성능을 재대로 누릴 수 없게 됩니다. 그리고 이러한 잘못된 사용에 대한 성능 이슈는 사용하는 측에서 최적화를 위한 노력을 해주셔야 됩니다.

HyeonbinLee commented 3 weeks ago

답변 감사합니다! 위 내용은 이해가 됐습니다. 그럼 혹시 해당 레이어의 가시거리를 조절하는건 어떤 함수를 사용해야 할까요?? setMaxDistance, tile_load_ratio 등 여러가지를 시도해 보았으나, 적용되는 함수를 못찾겠습니다

avamk2 commented 2 days ago

답변 쓰레드를 이제 확인해서 늦게 답변드려 죄송합니다.

타일 레이어 타입은 특정 수치 XXX m 식의 가시범위를 제공하지 않습니다.

Level에 의해서 동작되는 구조입니다. tile_load_ratio 의 배율에 따라서 어느정도 변경은 되지만 타일셋의 Level 정의 범위가 제한이 크게 있습니다.

멀리서 보일려면 Level 1에 가까운 수치가 되어야 됩니다. 다만 타일셋 정의는 현실적인 처리량과 표현되는 정보량을 생각해서 중요도가 높은것을 멀리서 중요도가 낮은것을 가까운거리에서 표현하는 정책을 새우고 사용하여야 됩니다.