当前位置: 首页 > news >正文

大疆智图_空三二维重建成果传输

一、软件环境

1.1 所需软件

  1、 大疆智图:点击下载;
  2、 ArcGIS Pro 3.1.5:点击下载,建议使用IDM或Aria2等多线程下载器;
  3、 IDM下载器:点击下载,或自行搜索;
  4、 FastCopy:自行搜索;
  5、 Rclone:自行搜索配置;
  6、 Python:安装软件ArcGIS Pro 3.1.5过程已安装,或自行搜索安装。

1.2 软件介绍

  1、 大疆智图:进行空三、二维重建,软件需授权。无有效授权使用其他同替软件;
  2、 ArcGIS Pro 3.1.5:使用Python脚本进行金字塔构建;
  3、 FastCopy:局域网内成果快速拷贝;
  4、 Rclone:配置账号成果上传分发;
  以上软件按需使用。

二、大疆智图软件操作

2.1 软件启动

  鼠标双击桌面“DJI Terra”图标,登录账号后进入软件。
在这里插入图片描述

2.2 任务创建

  鼠标点击“新建任务”,选择“可见光”。
在这里插入图片描述输入“任务名称”后点击“确定”。
在这里插入图片描述

2.3 导入照片

点击“添加照片”或“添加文件夹”,等待照片导入。
在这里插入图片描述

2.4 空三(建议操作,可跳过)

点击“空三”,“场景”:普通场景,点击“高级设置”—“像控点管理”。
在这里插入图片描述点击“坐标系”,“水平设置”:建议与二维重建坐标系一致;“高程设置”:按需设置。
在这里插入图片描述点击“空三”,等待重建。
在这里插入图片描述

2.5 空三质量报告导出(建议操作,可跳过)

空三重建完成后,核实无误。点击“空三质量报告”,点击“导出PDF”。
在这里插入图片描述

2.6 二维重建

“分辨率”:高“场景”:测绘场景(一般为测绘场景,农田无高差可选农田场景);
点击“高级设置”,“水平设置”:选择所需坐标系;“高程设置”:按需设置。
在这里插入图片描述
点击“开始重建”,等待重建。

三、成果传输操作

鼠标右键点击“影像_构建金字塔.py”;
选择“Run with ArcGIS Pro”,或选择“Edit with IDLE(ArcGIS Pro)”后按键盘“F5”按键。
在这里插入图片描述
输入“1”后,按“回车”键确认。
在这里插入图片描述输入或粘贴局域网存放成果的路径。
在这里插入图片描述构建金字塔运行情况。
在这里插入图片描述

四、代码

复制以下代码或点击下载脚本文件,并修改(注释、删除)以下(或者更多)参数,确保脚本能够正确执行。
#拼接大疆任务目录
dom_path
# 设置 7-Zip 可执行文件路径
seven_zip_path
# 设置 fcp 可执行文件路径
fcp_path
# 设置 rclone 可执行文件路径
rclone_path
# 设置 rclone 上传文件路径
rclone_up_path
#压缩至E盘根目录
compressed_file

# -*- coding: cp936 -*-
import arcpy
import os
import time
import datetime
import subprocess
import concurrent.futures# 判断指定目录是否存在
def check_path_exists(dir_path):   if not os.path.exists(dir_path):print(f"指定目录:{dir_path} 不存在!")exit()# 判断金字塔文件是否存在
def check_pyramids_file_exists(file_path):if os.path.isfile(f"{file_path}.ovr"):print(f"已经存在:{file_path} 金字塔文件")check_pyramids_file(file_path)else:pyramids_file(file_path)  # 检查金字塔文件是否正确
def check_pyramids_file(file_path):result = arcpy.management.CheckPyramids(file_path)if result:print(f"检查文件:{file_path} 金字塔文件正确")else:print(f"检查文件:{file_path} 金字塔文件错误")pyramids_file(file_path)  # 构建金字塔文件
def pyramids_file(file_path):print(f"开始构建:{file_path} 金字塔文件")start_time = time.time()arcpy.management.BuildPyramids(file_path)end_time = time.time()execution_time = end_time - start_timetd = datetime.timedelta(seconds=execution_time)hh, mm, ss = str(td).split(":")  # 将时间差转换为时分秒print(f"构建用时:{file_path} 构建{hh}小时{mm}分钟{ss}秒")# fascoy同步最新日期目录
def sync_update_folder(source_path, destination_path):print(f"正在同步:{source_path}")cmd = f'"{fcp_path}" /cmd=sync_update /force_close "{source_path}" /to="{destination_path}"'startupinfo = subprocess.STARTUPINFO()startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOWsubprocess.run(cmd, startupinfo=startupinfo, shell=True)# fascoy同步目录
def sync_folder(source_path, destination_path):print(f"正在同步:{source_path}")cmd = f'"{fcp_path}" /cmd=sync /force_close "{source_path}" /to="{destination_path}"'startupinfo = subprocess.STARTUPINFO()startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOWsubprocess.run(cmd, startupinfo=startupinfo, shell=True)# rclone同步文件
def upload_file(compressed_file, rclone_up_path):print(f"正在上传:{compressed_file}")cmd = f"{rclone_path} sync {compressed_file} {rclone_up_path} --progress"startupinfo = subprocess.STARTUPINFO()startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOWsubprocess.run(cmd, startupinfo=startupinfo, shell=True)print(f"上传成功:{compressed_file}")# 7Z压缩目录
def seven_zip_file(dom_path):# 获取文件名cmd = f'{rclone_path} ls "{rclone_up_path}"'process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)output, error = process.communicate()# 解析输出,将文件名存入列表中rclone_list = [line.split()[-1] for line in output.decode('utf-8').splitlines() if line.split()[-1]]for foldername in os.listdir(dom_path):folder_path = os.path.join(dom_path, foldername)if f"{foldername}.7z" not in rclone_list:compressed_file = f"E:\{foldername}.7z"#压缩至E盘根目录compressed_files.append(compressed_file)command = f'"{seven_zip_path} u {compressed_file} "{os.path.join(folder_path, "map", "result*.*")}"'print(f"正在压缩:{foldername}")startupinfo = subprocess.STARTUPINFO()startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOWsubprocess.run(command, startupinfo=startupinfo, shell=True)else:print(f"已经存在:{foldername} ;如需更新,请先删除 {rclone_up_path} 中同名文件。")# 删除本地 7z 文件       
def delete_file(compressed_file):for file in compressed_files:os.remove(file)print(f"本地文件:{file} 已删除!")# 多线程处理map目录下dsm.tif与result.tif文件
def process_folder(foldername):folder_path = os.path.join(dom_path, foldername)if os.path.isdir(folder_path):check_pyramids_file_exists(os.path.join(folder_path, r"map\dsm.tif"))check_pyramids_file_exists(os.path.join(folder_path, r"map\result.tif"))# 选择目录    
choice = input("待构建金字塔文件DOM路径为:\n1、所在目录\n2、指定目录\n请选择:")
if choice == "1":current_file_path = os.path.abspath(__file__)folder_path = os.path.dirname(current_file_path)#拼接大疆任务目录dom_path = os.path.join(folder_path, "PCGSPRO\\xxx")
else:dom_path = input("请输入指定目录:")
check_path_exists(dom_path)# 局域网存放路径
dst_path = input("请输入存放路径:")
check_path_exists(dst_path)if __name__ == "__main__":# 设置 7-Zip 可执行文件路径seven_zip_path = f'"C:/Program Files/7-Zip/7z.exe"'# 设置 fcp 可执行文件路径fcp_path = f'"C:/Program Files/FastCopy5.7.10_x64/fcp.exe"'# 设置 rclone 可执行文件路径rclone_path = f'"D:/Program Files/rclone/rclone.exe"'# 设置 rclone 上传文件路径rclone_up_path = "OneDrive:/成果数据"# 压缩文件的列表compressed_files = []# 创建线程池,最大线程为4,构建金字塔文件with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:executor.map(process_folder, os.listdir(dom_path))# 局域网同步目录for foldername in os.listdir(dom_path):folder_path = os.path.join(dom_path, foldername)if os.path.isdir(folder_path):sync_folder(f'"{os.path.join(folder_path, "map", "dsm*.*")}" "{os.path.join(folder_path, "map", "result*.*")}"', os.path.join(dst_path, foldername))sync_folder(f'"{os.path.join(folder_path, "map", "*_质量报告.pdf")}" "{os.path.join(folder_path, r"AT/report/POS_residual_of_camera.csv")}"', os.path.join(dst_path, foldername, "空三"))#压缩文件seven_zip_file(dom_path)# 异步上传文件with concurrent.futures.ThreadPoolExecutor() as executor:futures = [executor.submit(upload_file, file, rclone_up_path) for file in compressed_files]concurrent.futures.wait(futures)#删除压缩文件 delete_file(compressed_file)print("\nOVER!")
input("按任意键继续...")

五、说明

  1、大疆智图空三丢失图片:
  因空三导入的区域不连续,并且接壤的地方没有重叠。导致空三时,无法获取到对应的特征点,从而重建缺失或者失败。只能单独重建或补飞。见官方说明,与客服沟通情况。
在这里插入图片描述
  2、构建金字塔:
  默认使用4线程操作,最大线程数量可修改;
  3、局域网同步:
  sync_update_folder或sync_folder可选,考虑硬盘读写情况,使用FastCopy顺序同步;
  FastCopy同步:支持通配符,无需额外搭建环境;
  Rclone同步:自用更倾向于搭建webdav等方式同步,速度尚可;
  4、压缩文件:
  7Z参数可修改,考虑硬盘读写情况,使用7Z顺序压缩;
  5、脚本文件使用:
  需要键入参数适合人工交互处理,修改代码固定参数之后便于定时任务自动化处理。

六、更新

  20240611:
1、调整脚本文件代码顺序,便于注释、删除功能;
2、修改金字塔文件验证方式。

相关文章:

大疆智图_空三二维重建成果传输

一、软件环境 1.1 所需软件 1、 大疆智图:点击下载;   2、 ArcGIS Pro 3.1.5:点击下载,建议使用IDM或Aria2等多线程下载器;   3、 IDM下载器:点击下载,或自行搜索;   4、 Fas…...

python实现无人机航拍图片像素坐标转世界坐标

背景 已知相机参数(传感器宽度和高度、图像宽度和高度、焦距、相对航高、像主点坐标 ),在给定像素坐标的前提下,求世界坐标,大部分通过AI来实现,不知道哪个步骤有问题,望大家指正 脚本 impor…...

C#面:什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同

C#中的Windows服务是一种在后台运行的长时间运行的应用程序,它可以在Windows操作系统启动时自动启动,并在系统运行期间持续运行。与标准的EXE程序相比,Windows服务具有以下不同之处: 生命周期:Windows服务的生命周期与…...

Java基础面试题自测

文章目录 一、Java 中有哪 8 种基本数据类型?说说这 8 种基本数据类型对应的包装类型?二、包装类型的常量池技术了解么?三、为什么要有包装类型?四、什么是自动拆装箱?原理?四、遇到过自动拆箱引发的 NPE 问…...

【LeetCode 第 401 场周赛】K秒后第 N 个元素的值

文章目录 1. K秒后第 N 个元素的值🆗 1. K秒后第 N 个元素的值🆗 题目链接🔗 🐧解题思路: 前缀和 小规律🍎 🍎 从上图观察可知,规律一目了然,arr[i] arr[i] 对上一…...

游戏心理学Day10

习得性动机。 习得性动机也称社会性动机是指人与社会生活相联系的后天习得的动机,这类动机比原发性动机要多很多。 成就动机。 成就动机是指个人追求进步以及达到目标的内在动力。 在游戏中设计师总会担心过多的失败,会令玩家感到挫败进而离开游戏 对…...

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除,而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…...

Servlet基础(续集2)

HttpServletResponse web服务器接收到客户端的http的请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数:找HttpServletRequest如果要给客户端…...

【云原生】创建harbor私有仓库及使用aliyun个人仓库

1.安装docker #删除已有dockersystemctl stop docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine #安装docker yum install -y docker-ce-20.10.1…...

什么是SOLIDWORKS科研版

随着科技的不断进步,工程设计和科学研究变得越来越复杂,需要更强大的工具来满足需求。SOLIDWORKS科研版就是在这样的背景下诞生的,它为科研人员和工程师提供了一套全方面、快捷的解决方案,以应对各种科研和工程挑战。 SOLIDWORKS科…...

微信小程序页面配置

页面配置 小程序的配置可以配置页面路径、窗口表现、tabBar等,分为全局配置和页面配置,全局配置针对所有页面生效,页面配置只针对当前页生效。 全局配置 (app.json) (1) 路径配置 pages 配置页面路径,未配置路径的页面无法被访…...

如何将JPG/PNG位图免费快速一键转换成SVG格式的矢量图

环境: JPG/PNG位图 问题描述: 如何将JPG/PNG位图快速一键转换成SVG格式的矢量图 解决方案: 是一个人工智能驱动的图片转换工具,可以帮助用户将」JPG/PNG位图快速转换成SVG格式的矢量图,方便设计人员对图片进行二次…...

YOLO检测环境安装配置

YOLO介绍 YOLO学习手册:YOLO教程 YOLO [ˈjoʊloʊ](You Only Look Once)是一种快速而准确的目标检测算法,由Joseph Redmon等人在2016年提出。YOLO被广泛应用于计算机视觉领域,包括实时视频分析、自动驾驶、安防监控、…...

NOSQL -- ES

第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…...

【Python基础】名称空间和作用域

1.名称空间 将栈区进行分类,这些分类就是名称空间 名称空间存放什么名字空间个数何时创建&销毁内置名称空间built-inPython解释器内置的名字1个Python解释器启动&解释器关闭 全局名称空间 global Python文件内定义的类名,变量名,模块…...

安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能

一款手机安全智能预警软件,无论是网吧还是餐馆小聚,您的手机都能得到贴心的守护,一旦有人试图窃取,应用会立即发出高分贝警报,确保您在公交、地铁、商场等拥挤环境中依然能牢牢掌控手机。(解锁专业版&#…...

DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状

DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状 flyfish 重要的两个点 自由度决定卡方分布的形状(本文) 马氏距离的平方在多维正态分布下服从自由度为 k 的卡方分布 独立的信息 在统计学中,独立的信息是指数据…...

cordic IP核中,sin and cos的使用

参考视频:FPGA IP之CORDIC_哔哩哔哩_bilibili FPGA IP之CORDIC使用与仿真_哔哩哔哩_bilibili 一、参数说明 functional selection rotate是旋转,sin and cos是计算这两个三角函数,sinh和cosh是计算双曲正弦和双曲余弦 phase format 对于…...

SpringSecurity入门(三)

12、密码加密 12.1、不指定具体加密方式,通过DelegatingPasswordEncoder,根据前缀自动选择 PasswordEncoder passwordEncoder PasswordEncoderFactories.createDelegatingPasswordEncoder();12.2、指定具体加密方式 // Create an encoder with streng…...

luogu-P10570 [JRKSJ R8] 网球

题目传送门: [JRKSJ R8] 网球 - 洛谷https://www.luogu.com.cn/problem/P10570 解题思路 数学问题,暴力这个范围会超时。 首先,找出这两个数的最大公因数,将这两个数分别除以最大公因数,则这两个数互质,判…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...