API mapowania
Wprowadzenie do API DJI FlightHub Mapping
Dodano API FlightHub Mapping w OpenAPI, obsługujące szybką integrację przez strony trzecie możliwości mapowania w chmurze.
- Maksymalna liczba jednoczesnych zadań mapowania: 2 dla wersji standardowej, 5 dla wersji biznesowej i 10 dla wersji enterprise
- Strategia cenowa: Zgodna z publiczną chmurą DJI FlightHub. Pliki 2D, 3D i 3DGS są rozliczane osobno.
- Obsługuje przesyłanie danych chmury punktów do rekonstrukcji. Każde 5 MB modelu chmury punktów zużywa 1 obraz mapowania.
- W przypadku plików chmury punktów pliki LDR są liczone według rozmiaru, a obrazy i inne pliki według ilości.
Obsługiwany zakres mapowania:
Światło widzialne: model 2D, chmura punktów 3D, siatka 3D i 3DGS Gaussian splatting
Laserowa chmura punktów: obsługiwana dla L1 i L2, w przygotowaniu wsparcie dla L3Maksymalna liczba plików na zadanie mapowania: Każde zadanie mapowania ma maksymalny limit plików.
Model 2D: minimum 5, maksimum 20 000
Model 3D: minimum 5, maksimum 20 000
Gaussian splatting: minimum 5, maksimum 4 000
Laserowa chmura punktów: minimum 5, maksimum 20 000
Przykładowy kod
OpenAPI została uaktualniona do V2.0. Zachowanie API mapowania jest niezmienione; tylko segment "v0.1" w ścieżce został zastąpiony przez "v2.0".
- Na przykład "/openapi/v0.1/open_model/stores/obtain_token" staje się "/openapi/v2.0/open_model/stores/obtain_token".
- Jeśli jesteś użytkownikiem OpenAPI V1.0, po prostu pozostaw "v0.1".
1. Uzyskanie poświadczenia przesyłania
Uzyskaj tymczasowe poświadczenie do przesyłania plików multimedialnych do modelowania do zasobnika.
POST /openapi/v2.0/open_model/stores/obtain_token
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy
Odpowiedź
{
"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. Wysłanie wywołania zwrotnego przesyłania
Służy do powiadomienia, które zasoby plików należy skopiować po przesłaniu pliku.
POST /openapi/v2.0/open_model/stores/upload_callback
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy
Żądanie
{
"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"
}
]
}
Odpowiedź
{
"code": 0,
"message": "",
"data": {
"resource_uuid": "69e49a97-6a02-4638-b1b5-b9e871b6c51e",
"upload_count": 2
}
}
- etag określa wartość skrótu przypisaną plikowi przez zasobnik w celu weryfikacji integralności pliku.
Przykładowy kod uzyskania wartości etag (Go)
meta, _ := bucket.GetObjectDetailedMeta(key)
etag := strings.Trim(meta.Get("ETag"), "\"")
3. Uruchomienie zadania rekonstrukcji
POST /openapi/v2.0/open_model/models/reconstruction/start
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy
Żądanie
{
"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
}
Odpowiedź
{
"code": 0,
"message": "",
"data": {
"model_3d": {
"uuid": "476954f7-3ad4-4dcf-a03f-2654d5e0d3cc",
"status": 12,
"sub_error_code": 0
}
}
}
4. Uzyskanie szczegółów modelu
Uzyskaj szczegóły modelu, aby sprawdzić jego status, rozmiar i postęp zadania.
GET /openapi/v2.0/open_model/models/476954f7-3ad4-4dcf-a03f-2654d5e0d3cc
X-User-Token: xxxxxxxx
X-Request-ID: yyyyyyyy
Odpowiedź
{
"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"
}
}