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

一、软件环境

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、修改金字塔文件验证方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/347295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻防演练之-网络安全产品大巡礼二

书接上文,《网络安全攻防演练风云》专栏之攻防演练之-网络安全产品大巡礼一,这里。 “咱们中场休息一会,我去接杯水哈”,看着认真听讲的众人,王工很是满意,经常夹在甲乙两方受气的他,这次终于表…

VBA即用型代码手册:删除空列Delete Empty Columns

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率,而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想,积木编程最重要的是积木如何搭建…

面试题:ArrayList和LinkedList的区别

ArrayList和LinkedList都是Java中实现List接口的集合类,用于存储和操作对象列表,但它们在内部数据结构、性能特性和适用场景上有所不同: 1.内部数据结构: ArrayList:基于动态数组实现。这意味着它在内存中是连续存储…

鸿蒙元服务未来是能一“通”多端的前端形态?

2024年,华为鸿蒙的热度只增不减。 在2023年底就有业内人士透露,华为明年将推出不兼容安卓的鸿蒙版本,未来IOS、鸿蒙、安卓将成为三个各自独立的系统。 果不其然,执行力超强的华为,与2024年1月18日的开发者&#xff0…

web刷题记录(5)

[羊城杯 2020]easycon 进来以后就是一个默认测试页面, 在这种默认界面里,我觉得一般不会有什么注入点之类的,所以这里先选择用御剑扫扫目录看看有没有什么存在关键信息的页面 扫了一半发现,很多都是和index.php文件有关&#xff0…

C# Winform内嵌窗体(在主窗体上显示子窗体)

在开发Winform项目中,经常会要切换不同的窗体。通常程序都有一个主窗体,在切换窗体时往往需要关闭其他子窗体,这个实例就来介绍MDI主窗体内嵌子窗体的实现方法。 MDI主窗体要设置一个比较重要的属性,IsMdiContainertrue。子窗体的…

VRRP多备份组(华为)

#交换设备 VRRP多备份组 当 VRRP 配置为单备份组时,业务全部由 Master 设备承担,而 Backup 设备完全处于空闲状态,没有得到充分利用。VRRP 可以通过配置多备份组来实现负载分担,有效地解决了这一问题。 VRRP 允许同一台设备的…

ClickHouse内幕(1)数据存储与过滤机制

本文主要讲述ClickHouse中的数据存储结构,包括文件组织结构和索引结构,以及建立在其基础上的数据过滤机制,从Part裁剪到Mark裁剪,最后到基于SIMD的行过滤机制。 数据过滤机制实质上是构建在数据存储格式之上的算法,所…

迪杰斯特拉算法——C语言

迪杰斯特拉算法是一种用于在图中寻找节点之间最短路径的算法。它常用于路由以及其他图算法的子过程。 假设我们输入的是0顶点: 第一步,先寻找距离最小的顶点,这也是我们找到的第一个顶点,也就是顶点1,因为其他顶点距离…

转型AI产品经理(4):“认知负荷”如何应用在Chatbot产品

认知负荷理论主要探讨在学习过程中,人脑处理信息的有限容量以及如何优化信息的呈现方式以促进学习。认知负荷定律认为,学习者的工作记忆容量是有限的,而不同类型的认知任务会对工作记忆产生不同程度的负荷,从而影响学习效果。以下…

最短路径Dijkstra算法详解

目录 最短距离问题 最短路径问题 进阶--标尺增多 升级方法 例题应用 最短距离问题 Dijkstra算法的策略: 设置集合S存放已被访问的顶点,然后执行n次下面的两个步骤(n为顶点个数): (1)每次…

Django框架中Ajax GET与POST请求的实战应用

系列文章目录 以下几篇侧重点为JavaScript内容0.0 JavaScript入门宝典:核心知识全攻略(上)JavaScript入门宝典:核心知识全攻略(下)Django框架中Ajax GET与POST请求的实战应用VSCode调试揭秘:L…

Nginx05-负载均衡详解、LNMP+NFS、会话保持、负载均衡状态检查upstream-check、平滑升级

目录 写在前面Nginx05Nginx 负载均衡(upstream模块)概述常见选择负载均衡和反向代理的区别Nginx负载均衡的方式Nginx运行状况检查备份服务器Nginx upstream模块选项说明 实验1 负载均衡两台frontfront配置lb01配置测试流程梳理 实验2 LNMPNFS小实验NFS配…

SpringBoot内置数据源

回顾: 在我们之前学习在配置文件当中配置对应的数据源的时候, 我们设置的数据源其实都是Druid的数据源, 并且其配置有两种方式, 当然这两种方式都需要我们导入对应的有关 德鲁伊 的依赖才行 一种是直接在开始设置为 druid 数据源类型的一种是在对应的正常的数据库配置下, 设置…

用户管理与服务器远程管理

用户管理 服务器系统版本介绍 windows服务器系统:win2000 win2003 win2008 win2012 linux服务器系统:Redhat Centos 用户管理 用户概述 (1)每一个用户登录系统后,拥有不同的操作权限。 (2)…

【C++课程学习】:类和对象(拷贝构造和运算符重载)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 ✍拷贝构造: 🍉特点一: 🍉特点二: &…

气膜建筑在体育和娱乐行业的多样化应用—轻空间

随着人们生活水平的提高和健康意识的增强,体育和娱乐行业的发展迎来了新的机遇和挑战。气膜建筑,作为一种新型建筑技术,因其独特的优势和广泛的应用场景,正在引领体育和娱乐行业的新潮流。 快速建设高品质体育场馆 气膜建筑以其快…

接口幂等性设计(5 大方案罗列)

结合案例、列举场景的接口幂等性设计方案。 方案 1. 状态机 业务场景,数据审核成功后进行短信通知,或者是订单状态变成已支付后,短信通知用户订单生成的详细信息,等等和状态有关的操作。 假设 status:0(待…

基于遗传优化算法的风力机位置布局matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的风力机位置布局matlab仿真,风力机位置布局优化是风能转换系统设计中的一个重要环节,旨在最大化风场的整体发电效率。仿…

创建 MFC DLL-使用关键字_declspec(dllexport)

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 从MFC DLL中导出函数的另一种方法是在定义函数时使用关键字_declspec(dllexport)。这种情况下,不需要DEF文件。 导出函数的形式为: declspec(dll…