매핑 API

2026-09-20

DJI FlightHub 매핑 API 소개

OpenAPI에 FlightHub 매핑 API를 추가하여 타사에서 클라우드 매핑 기능을 빠르게 통합할 수 있습니다.

  1. 동시 매핑 작업 최대 수: 스탠더드 버전 2개, 비즈니스 버전 버전 5개, 엔터프라이즈 버전 10개
  2. 가격 전략: DJI FlightHub 퍼블릭 클라우드와 동일합니다. 2D, 3D 및 3DGS 파일은 각각 별도로 과금됩니다.
  • 재구성을 위해 포인트 클라우드 데이터를 업로드하는 기능을 지원합니다. 포인트 클라우드 모델 5MB당 매핑 이미지 1개를 사용합니다.
  • 포인트 클라우드 파일의 경우 LDR 파일은 용량 기준으로 계산되고, 이미지 및 기타 파일은 개수 기준으로 계산됩니다.
  1. 지원되는 매핑 범위:
    가시광선: 2D 모델, 3D 포인트 클라우드, 3D 메시, 3DGS 가우시안 스플래팅
    레이저 포인트 클라우드: L1 및 L2 지원, L3 지원 준비 중

  2. 매핑 작업당 최대 파일 개수: 각 매핑 작업에는 최대 파일 개수 제한이 있습니다.
    2D 모델: 최소 5, 최대 20,000
    3D 모델: 최소 5, 최대 20,000
    가우시안 스플래팅: 최소 5, 최대 4,000
    레이저 포인트 클라우드: 최소 5, 최대 20,000

샘플 코드

OpenAPI가 V2.0으로 업그레이드되었습니다. 매핑 API의 동작은 변경되지 않았으며, 경로의 「v0.1」이 「v2.0」으로 변경되었을 뿐입니다.

  • 예를 들어 「/openapi/v0.1/open_model/stores/obtain_token」은 「/openapi/v2.0/open_model/stores/obtain_token」으로 변경됩니다.
  • OpenAPI V1.0 사용자라면 「v0.1」을 그대로 유지하면 됩니다.

1. 업로드 자격 증명 가져오기

모델링용 미디어 파일을 버킷에 업로드하기 위한 임시 자격 증명을 가져옵니다.

POST /openapi/v2.0/open_model/stores/obtain_token
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy

응답

{
    "code": 0,
    "message": "",
    "data": {
        "cloud_name": "ali",
        "access_key_id": "xxx",
        "secret_access_key": "xx",
        "session_token": "xx",
        "region": "cn-hangzhou",
        "cloud_bucket_name": "xxx",
        "callback_param": "Q1g0Mm1uOUR6ZUJnMlkzb29vUmE0dmNWdnh0b1M1eis0d3B2c0paQmsrUURmT0Z5dHVLblBjbVllYlZ3cnovbE5ZdHRqM2VjMWxDTUwzYVJCTFk0N2tWd2pkSWIwQlU5dHBMZVZkbXJXZ2xJSWFhdHNxWnE2anQrTk9SMzlET0JNUUg0WkdDVDJ0OHNWbC9mMTZ6R01meEp2WGRzMFU4ZFkyMFIyMzJ6Ty9UUWZ2WUhlcEJWYnQ0NjJDdDFISS9Za0FON0srVjdZYnJITXprNHpRS09aSTJMbEZBdkpLNDNlVUd5dmRzMUJSSTVQVVA1VVlWVnEraDlNdkpQbHdSSw==",
        "store_path": "fh/organizations/5a6f9d4b-2a38-4b4b-86f9-3a678da0bf4a/open_reconstruction/tmp/fbe4f0a1-561c-43d1-a880-baf464bed5c6/{fileName}",
        "expire_time": 1768209932,
        "end_point": "https://xxx"
    }
}

2. 업로드 콜백 전송

파일 업로드 후 어떤 파일 리소스를 복사해야 하는지 알리는 데 사용됩니다.

POST /openapi/v2.0/open_model/stores/upload_callback
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy

요청

{
    "resource_uuid": "69e49a97-6a02-4638-b1b5-b9e871b6c51e",
    "resource_name": "test",
    "callback_param": "Q1g0Mm1uOUR6ZUJnMlkzb29vUmE0dmNWdnh0b1M1eis0d3B2c0paQmsrUURmT0Z5dHVLblBjbVllYlZ3cnovbE5ZdHRqM2VjMWxDTUwzYVJCTFk0N3JTRjg2anc0aklVMEZ5U0FUdUNCbThqNDJMNEdPRkgvMzZBRWZNZDluZHJGNDJWMGxjUHFUMlk1bG9uNVN5eDZON2l5K0NVZUJGZ3Jrdyt5QTB5RXp1eWJESWZqdG5HeGp5QkF2WnRHTFpZc0thVWtTL1I1eVp5M0UrS0VvMGVpTVlLUGpvUzhiUlo4dE1rMk1PY2lUZz0=",
    "files": [
        {
            "name": "DJI_20250721120152_0025_V.jpeg",
            "etag": "69922E94721B338B174C219542370E8E"
        },
        {
            "name": "DJI_20250721120153_0026_V.jpeg",
            "etag": "60C05FF3D620ADA0365F3427F2A43FA7"
        }
    ]
}

응답

{
    "code": 0,
        "message": "",
        "data": {
        "resource_uuid": "69e49a97-6a02-4638-b1b5-b9e871b6c51e",
        "upload_count": 2
    }
}
  • etag는 버킷이 파일 무결성을 검증하기 위해 파일에 할당하는 해시 값을 지정합니다.

etag 값 가져오기 위한 샘플 코드(Go)

meta, _ := bucket.GetObjectDetailedMeta(key)
etag := strings.Trim(meta.Get("ETag"), "\"")

3. 재구성 작업 시작

POST /openapi/v2.0/open_model/models/reconstruction/start
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy

요청

{
    "resource_uuid": "69e49a97-6a02-4638-b1b5-b9e871b6c51e",
    "parameter_2d": "",
    "parameter_3d": "{\"parameter\":{\"cut_AOI\":false,\"generate_b3dm\":true,\"generate_las\":false,\"generate_obj\":false,\"generate_osgb\":false,\"generate_ply\":false,\"generate_pnts\":false,\"generate_point_ply\":false,\"global_min_depth\":-1,\"model_simplify\":0.2,\"output_geo_desc\":{\"cs_type\":\"GEO_CS\",\"geo_cs\":\"EPSG:32650\",\"geo_cs_wkt\":\"\",\"override_vertical_cs\":\"\"},\"output_mesh\":true,\"output_ply_with_normals\":false,\"output_pointcloud\":false,\"ply_with_normals_level\":0,\"quality_level\":3,\"stereo_mode\":false,\"usable_memory_GB\":60,\"water_refine\":false}}",
    "parameter_3dgs": "",
    "parameter_lidar": "",
    "delete_resource_if_finish": false
}

응답

{
    "code": 0,
    "message": "",
    "data": {
        "model_3d": {
            "uuid": "476954f7-3ad4-4dcf-a03f-2654d5e0d3cc",
            "status": 12,
            "sub_error_code": 0
        }
    }
}

4. 모델 세부 정보 가져오기

모델 상태, 크기 및 작업 진행 상황을 확인하기 위해 모델 세부 정보를 가져옵니다.

GET /openapi/v2.0/open_model/models/476954f7-3ad4-4dcf-a03f-2654d5e0d3cc
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy

응답

{
    "code": 0,
    "message": "",
    "data": {
        "resource_uuid": "69e49a97-6a02-4638-b1b5-b9e871b6c51e",
        "model_uuid": "476954f7-3ad4-4dcf-a03f-2654d5e0d3cc",
        "model_type": 2,
        "model_status": 9,
        "model_size": 37420969,
        "reconstruction_progress": 100,
        "error_code": 0,
        "zip_status": 2,
        "zip_progress": 100,
        "zip_file_key": "xxxx"
    }
}
Last Updated: