@nnsay/dji-terra-api-sdk
Version:
108 lines (87 loc) • 3.44 kB
Markdown
**Terra API SDK** 是一个用于封装 **[大疆智图 API](https://developer.dji.com/doc/terra_api_tutorial/cn/)** 的 Node.js SDK,提供了简单易用的接口,帮助开发者免去繁琐的 API 调用签名过程,直接通过 SDK 发送请求。
此外,该 SDK 还提供了 **TypeScript 类型声明文件**,使 TypeScript 开发者可以通过类型检查确保请求参数和返回值的正确性,从而提高开发效率并减少错误。
- **简化 API 调用**:封装复杂的签名计算,开发者无需手动计算 API 请求签名。
- **TypeScript 支持**:提供完整的 TypeScript 类型声明,增强代码可靠性和可维护性。
- **完整测试流程脚本**:提供示例脚本,可用于快速学习和实际使用 SDK 进行 3D 重建。
使用 npm 或 yarn 进行安装:
```sh
npm install @nnsay/dji-terra-api-sdk
yarn add @nnsay/dji-terra-api-sdk
```
参考:test/full-step.ts
```typescript
import {
CreateJobAPIResponse,
StartJob3DParamater,
TerraAPI,
} from 'dji-terra-api-sdk';
import os from 'os';
const exec = async () => {
// AK/SK come from env prameter
const terraAPI = new TerraAPI();
// or AK/SK hardcode
// const terraAPI = new TerraAPI(appKey, secretKey, 'https://openapi-cn.dji.com');
// TODO: change the dir to you drone image dir
const imageDir = `${os.homedir()}/Downloads/tmp/test/images`;
const apiOutputDir = `${os.homedir()}/Downloads/tmp/test/terra-api-result`;
// 1. Get STS Token for upload files
const stsToken = await terraAPI.obtainToken();
// 2. Upload drone images to tmp
const uploadedFiles = await terraAPI.uploadFile(stsToken, imageDir);
// 3. Create resource
const resource = await terraAPI.createResource({
name: 'test-obj',
type: 'map',
});
// 4. Bind the uploaded files and resource
await terraAPI.uploadCallback(
stsToken.callbackParam,
uploadedFiles,
resource.uuid,
);
// 5. Create job
const job = await terraAPI.createJob({ name: `job-test-obj` });
// 6. Start job with custom parameters
await terraAPI.startJob<StartJob3DParamater>(job.uuid, {
parameters: {
parameter: {
// Texture model result parameter
generate_ply: false,
generate_b3dm: false,
generate_obj: true,
},
},
resourceUuid: resource.uuid,
type: 15,
});
// 7. Check job status
let checkJob: CreateJobAPIResponse;
const sleep = (seconds = 10) =>
new Promise((resolve) => setTimeout(() => resolve(true), seconds * 1000));
do {
checkJob = await terraAPI.getJob(job.uuid);
await sleep();
} while (checkJob.status < 6);
if (checkJob.status == 7) {
throw new Error('terra api job execution fail');
}
// 8. Downlaod 3D output
await terraAPI.downloadFiles(checkJob.outputResourceUuid, apiOutputDir);
};
exec().catch((err) => {
console.debug(err);
console.error(err.response?.data);
});
```
由于该 SDK 仅对 **大疆智图 API** 进行封装,不包含额外的自定义逻辑,因此没有采用代码测试框架或覆盖率工具。
在 `test` 目录下,提供了一个完整的 **测试脚本**,它不仅可以用于验证 SDK 是否能够正常工作,还能帮助开发者快速上手,完成从 **任务创建** 到 **3D 重建** 的完整流程。
```sh
yarn test
```