공지

제목ESS 사업 관련 기능 API 사용 안내2026-02-13 15:35
카테고리GeOnDT for JS
작성자
첨부파일ESSList.txt (154KB)sampleESS_SET.txt (225.7KB)

ESS 사업 구현 목표 서비스와 관련된 GeOnDT for JS 기능에 대한 상세 안내 드립니다.

 

볼드체로 표현된 함수이름 이나 소스 구문은 관련 예제에서 검색하여 사용법과 구문 흐름을 파악해 봐야한다는 의미입니다.

 

*참고 예제 및 가이드 페이지

시작하기[https://3d.geon.kr/home/index.html] - 사용자컴포넌트 제어하기
시작하기[https://3d.geon.kr/home/index.html] - 분석모드 시작하기 - 모델편집(GIZMO)

시작하기[https://3d.geon.kr/home/index.html] - 분석모드 시작하기 - POI 생성
시작하기[https://3d.geon.kr/home/index.html] - 3D Vector 시작하기 - 열원 객체
시작하기[https://3d.geon.kr/home/index.html] - 3D Vector 시작하기 - 흐름 객체 (파이프) 
시작하기[https://3d.geon.kr/home/index.html] - 선택 객체 생성 및 시작하기

 

다중 시설물 레이어 편집 예제 : [https://3d.geon.kr/doc/tutorial-official/analysisMultipleComponent.html]
시설물 상세 편집 및 실내환경 구성 예제 : [https://3d.geon.kr/doc/tutorial-official/componentControlAtIndoor.html]

객체 정보 조회 예제 : [https://3d.geon.kr/doc/tutorial-official/selectModel.html]

3D 흐름 객체 그리기 예제 : [https://3d.geon.kr/doc/tutorial-official/flowObject.html]

 

1. 3D 자료(3ds)의 출력

서비스에 사용되는 Ess 원본 데이터는 출력할 3DS 와 위치정보가 있는 엑셀파일로 구성됩니다.

서비스에 사용되는 Ess 원본 데이터를 출력하기 위한 단계는 다음과 같습니다.

'다중 시설물 레이어 편집 예제'를 확인하세요.

 

1) 위치정보가 있는 엑셀파일을 json 리스트 객체로 변환.

- 변환 파일 예시는 '첨부파일 [ESSList.txt]' 확인. 

- '첨부파일 [ESSList.txt]'의 형태 또는 클라이언트에서 인식할 수 있는 간단한 json 형태로 변환이 필요합니다. -> 엑셀 파일을 그대로 읽는 기능은 제품 기능에 미포함

2) 컴포넌트 불러오기 형식의 json을 작성

- '다중 시설물 레이어 편집 예제'의 '$(document).on('click', '#btnESSSample1', async function () {...});' 하는 코드 참고

3) 컴포넌트 불러오기 json을 컴포넌트 레이어에 입력 

- 만들어진 불러오기 json의 예시는 '첨부파일 [sampleESS_SET.txt]' 확인

- 레이어 입력은 '다중 시설물 레이어 편집 예제'의 'autoAdd()' 함수 참고

 

* 주의 사항

사전에 주어진 엑셀에는 사용자 정의 이름(ID), 위치, 회전 정보만 존재하므로, 예를 들어 DFC110102 컴포넌트가 어떤 3DS 원본 모델을 사용해야 하는지는 엑셀만으로는 판단할 수 없습니다.

따라서 **실제 모델(원본 3DS)과 생성할 컴포넌트 간 매핑(연결고리)**를 별도로 구성해야 합니다.

 

'첨부파일 sampleESS_SET.txt' 파일 기준으로 설명하자면, 아래 이미지 처럼 실제로 출력한 모델명을 기입해줘야 합니다. 

'첨부파일 sampleESS_SET.txt' 에는 어떤 원본 모델을 사용하는지의 object 속성이 없습니다. 그래서 예제의 매핑 스크립트에 '오브젝트명 - 원본 모델 이름' 이 하드코딩 되어있고, 그에 따라 json 을  재처리를  해주고 있습니다. 

 

2. 컴포넌트 선택(Selector) 

'객체 정보조회 예제'를 확인하세요.

 

1) U3dSelect 생성 및 활성화

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'initSelector' : U3dSelect 생성 및 활성화
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'window.select.on('end', onSelectEnd, 'select.end')' :  “선택 종료 이벤트” 연결합니다.

 

2) 선택 종료 시 처리(단일/박스 공통 진입점)

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'onSelectEnd' : 선택 결과를 받아 작업

 

3) 박스 선택 모드 전환(스페이스 키)

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setSelectBoxMode' : 선택 모드를 변경합니다. ['box' : 박스 선택, 'point' : 단일 선택]

 

[단일 선택 이미지]

 

[박스 선택 이미지]

 

[박스 선택 결과 이미지]

 

3. 컴포넌트 제어(이동/회전/스케일)

'시설물 상세 편집 및 실내환경 구성 예제'를 확인하세요.

 

1) Gizmo 생성

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'initSelector' : Gizmo를 가져오고 콜백을 연결합니다. [ gizmo = app.getAnalysis('GizmoModel') ]

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'activeGizmo' : 선택 대상에 기즈모가 활성화됩니다.

 

2) Gizmo mode 변경

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'gizmo.setMode' : Gizmo의 모드를 변경합니다. (위치:'translate', 회전:'rotate', 크기:'scale' )

[위치 | 회전 | 크기 | 리셋 | 정렬 | 상세편집 | 삭제, '시설물 상세 편집 및 실내환경 구성 예제' 의  객체 선택시, 화면 상단 중앙 UI 참고]

 

3) 상세편집(리모콘)을 이용한 제어

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'openDetailView' : 상세편집 패널 제어

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setPos' : 대상 컴포넌트의 위치 변경

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setRot' : 대상 컴포넌트의 회전 변경

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setScale' : 대상 컴포넌트의 크기 변경

[ '시설물 상세 편집 및 실내환경 구성 예제' 의 ' 2) 참고 UI' 에서의 상세편집 패널 참고]

 

4. 컴포넌트 계층 구조(부모-자식)

부모- 자식계층을 설정하여 부모객체에 상태(위치, 회전, 크기)가 수정될 경우 자식계층의 객체도 반영됩니다.

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'changeParent'  : 부모계층을 설정하는 함수

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'removeparent' : 부모 계층을 해제

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'removeChild' : 자식 계층을 해제

 

5. 컴포넌트 스타일 / LOD 설정

거리에 따라 보여지는 형상을 설정하는 함수입니다. 

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setLODMode' : 대상 컴포넌트의 LOD를 설정

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setUpdateFunc' : 컴포넌트의 LOD 사용자 제어 함수를 입력

 

6. 컴포넌트 저장 / 불러오기

현재의 상태를 json 데이터로 저장/불러오기를 하여 이전 작업을 불러 올 수있습니다. 

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'loadComponentModel' : 대상 모델을 불러오기 

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'saveWork' : 대상 모델을 json데이터로 저장

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'loadWork' : 대상 모델을 데이터의 상태(위치, 회전, 크기, 계층관계)에 맞춰서 불러오기

 

7. 컴포넌트 다중 앱 연결하기 

단일 렌더링을 위한 새로운 U3dApp 생성후 메인App에서 제어되고 있는 객체정보를 전달 합니다.

['시설물 상세 편집 및 실내환경 구성 예제' 의 계층 정보 수정 UI 및 기능 참고]

 

메인 렌더링 U3dApp -> 단일 렌더링 U3dApp 로의 객체 정보 전달

- '시설물 상세 편집 및 실내환경 구성 예제' 의 'setSubMap' : app2를 생성하고 app의 요소를 app2에 복제하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'createSubMap : app2를 생성 / app2에서 출력할 subComponentLayer & subVectorLayer & subGizmo & select2 를 생성 (init 함수)
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'collectChildTree : 편집할 대상 컴포넌트의 자식 계층 구조를 읽어 생성 파라미터를 수집하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'buildChildTree : 수집한 자식 컴포넌트의 정보를 읽어 생성하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'createGridPlane : app2에 바닥 격자 플랜을 생성하는 함수 

*추후 여러 app를 사용할 경우 렌더링 부하 발생 => 현재 포커싱 된 U3dApp만 렌더링을 수행하고, 다른 U3dAPP는 렌더링 및 업데이트 중지 필요 => 추후 가이드 예정

 

단일 렌더링 U3dApp 작업 결과 -> 메인 렌더링 U3dApp 전달

- '시설물 상세 편집 및 실내환경 구성 예제' 의 '$(document).on('click', '#sub-map-save', function () { .. })' : 계층 편집 (app2) 작업 후 확인 버튼 클릭시 동작. app2 내용을 'saveWork' 로 레이별 저장 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ '​​​​​​​setOriginMap' : app2에서 편집한 내용을 메인 app에 반영하는 부분
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ ​​​​​​​'removeOrigin' : app에 이전 컴포넌트를 제거하는 함수 ( 제거 안하면 app2의 편집 내용으로 app에 새로 생성시 중복되어 오류 발생. 꼭 원본을 지우고 생성해야함) 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ ​​​​​​​'vectorLayer.loadWork' : 저장 json 데이터로 벡터 레이어를 불러오는 함수 (어댑터 불러오기) 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'componentLayer.loadWork' : 저장 json 데이터로 컴포넌트 레이어를 불러오는 함수 (컴포넌트 불러오기)  

 

8. 어뎁터 활용하기

'시설물 상세 편집 및 실내환경 구성 예제'에서 '어댑터 추가' 탭 UI 를 확인하세요.

'시작하기 - 사용자컴포넌트 제어하기 - 어뎁터 사용하기' 페이지를 확인하세요

 

어뎁터 추가

- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​​​​​​​​ '$("#addAdapter").click((e) => { ... })' : 어댑터 추가하는 부분.
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​​​​​​​​ 'createAdaptedGeometry' : 어댑터를 생성하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'setWorldPosition' : 어댑터를 월드 좌표를 통해 추가 (위경도 좌표보다 세밀하게 배치 가능)

 

어뎁터에 객체 붙이기

- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'gizmoUpdate' : 기즈모 핸들 드래그시 호출되는 함수 -> 기즈모 핸들과 어댑터 간 교차 검사 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'gizmo.intersectAdapters(adapters)' : 기즈모에서 생성된 어댑터들과 교차되는지 검사하는 부분 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'hideBounds / showBounds' : 어댑터가 교차될때 교차되는 버퍼 범위를 하이라이트 하는 부분
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'hideLine / showLine' :  어댑터에서 교차 지점까지 선으로 표시하는 부분 

 

- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'gizmoEnd' : 기즈모 핸들 조작 종료시 호출되는 함수 -> 실제 어댑터에 객체를 붙이는 부분 
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'gizmo.setManualUpdate(position)' : 어댑터의 위치로 기즈모 핸들을 이동시켜서 객체를 어댑터로 붙이는 부분

 

9. 흐름객체(전선) 활용하기
'3D 흐름 객체 그리기 예제'를 확인하세요.
'시설물 상세 편집 및 실내환경 구성 예제'에서 '전선 추가' 탭 UI를 확인하세요.

'시작하기 - 3D Vector 시작하기 - 흐름 객체(파이프)' 페이지를 확인하세요


- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'createFlowPipe' : 전선을 생성하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'flowPipe.flowStart' : 흐름 애니메이션을 시작하는 함수. (안해주면 애니메이션 없이 일반 파이프로 출력) 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'addPipe' : 화면 클릭 좌표를 통해 파이프를 해당 좌표까지 연장하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'endPipe' : 파이프 생성을 종료하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'previewPipe' : 입력 좌표로 그려지는 미리보기 파이프 생성함수 

 

10. 열원객체 활용하기
'시설물 상세 편집 및 실내환경 구성 예제' 에서 '열원 추가' 탭 UI를 확인하세요.

'시작하기 - 3D Vector 시작하기 - 열원 객체' 페이지를 확인하세요


- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'createHeatGeometry' : 열원 객체를 생성하는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의  'setTarget' : 열원 객체가 열 데이터를 출력 할 대상을 지정하는 함수 (이걸 해줘야 해당 3d객체에 열표현) 
*열원 객체는 하나의 열원에 다중 객체를 대상으로 지정 가능 

 

11. 카메라 상세 설정하기
'시설물 상세 편집 및 실내환경 구성 예제' 에서 '카메라 설정' 탭 UI를 확인하세요.


- '시설물 상세 편집 및 실내환경 구성 예제' 의 '$('input[name="camera-mode"]').click((e) => {...});'  : 실내/야외 별로 카메라 설정을 변경하는 부분
- '시설물 상세 편집 및 실내환경 구성 예제' 의​​​​​​​ 'app.getMapControl()' : 현재 앱의 컨트롤러(카메라제어기)를 가져오는 함수 
- '시설물 상세 편집 및 실내환경 구성 예제' 의 'controller.getFactor' : 해당 프로퍼티를 수정해 카메라를 상세 설정하는 부분