API de cartographie

2026-09-20

Présentation de l’API de cartographie DJI FlightHub

Ajout de l’API de cartographie FlightHub à OpenAPI, permettant l’intégration rapide par des tiers des capacités de cartographie Cloud.

  1. Nombre maximal de tâches de cartographie simultanées : 2 pour la version standard, 5 pour la version business et 10 pour la version entreprise
  2. Stratégie de tarification : Identique au cloud public DJI FlightHub. Les fichiers 2D, 3D et 3DGS sont facturés séparément.
  • Prend en charge le téléversement de données des nuages de points pour la reconstruction. Chaque tranche de 5 Mo de modèle de nuage de points utilise 1 image de cartographie.
  • Pour les fichiers de nuage de points, les fichiers LDR sont comptés en fonction de leur taille, tandis que les images et les autres fichiers sont comptés en fonction de leur quantité.
  1. Plage de cartographie prise en charge :
    Lumière visible : Modèle 2D, nuage de points 3D, maillage 3D et Gaussian Splatting 3DGS
    Nuage de points laser : pris en charge pour L1 et L2, prise en charge en préparation pour L3

  2. Nombre maximal de fichiers par tâche de cartographie : Chaque mission de cartographie a une limite maximale de fichiers.
    Modèle 2D : Minimum 5, maximum 20 000
    Modèle 3D : Minimum 5, maximum 20 000
    Gaussian Splatting : Minimum 5, maximum 4 000
    Nuage de points laser : Minimum 5, maximum 20 000

Code d’exemple

OpenAPI a été mis à jour vers la V2.0. Le comportement de l'API de cartographie est inchangé ; seul le segment « v0.1 » du chemin est remplacé par « v2.0 ».

  • Par exemple, « /openapi/v0.1/open_model/stores/obtain_token » devient « /openapi/v2.0/open_model/stores/obtain_token ».
  • Si vous êtes un utilisateur d'OpenAPI V1.0, conservez simplement « v0.1 ».

1. Obtenir les identifiants de chargement

Obtenir les identifiants temporaires pour charger dans le bucket les fichiers multimédias destinés à la modélisation.

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

Réponse

{
    "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. Envoyer un rappel de chargement

Cela est utilisé pour indiquer quelles ressources de fichiers doivent être copiées après le chargement du fichier.

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

Demander

{
    "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"
        }
    ]
}

Réponse

{
    "code": 0,
        "message": "",
        "data": {
        "resource_uuid": "69e49a97-6a02-4638-b1b5-b9e871b6c51e",
        "upload_count": 2
    }
}
  • etag spécifie la valeur de hachage attribuée au fichier par le bucket afin de vérifier l’intégrité du fichier.

Exemple de code pour obtenir la valeur etag (Go)

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

3. Commencer la tâche de reconstruction

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

Demander

{
    "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
}

Réponse

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

4. Obtenir les détails du modèle

Obtenir les détails du modèle pour vérifier l’état du modèle, sa taille et la progression de la tâche.

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

Réponse

{
    "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: