Python大疆导出csv文件转化大地2000的dxf文件

大疆导出三维模型里面有个models\pc\0\terra_grid\csv\terra_grid.csv文件,里面记录所有点的坐标和高程,但坐标是经纬度坐标,需要转化为大地2000坐标。

我参照了:经纬度坐标转换为CGCS2000大地坐标系对应XY值(PYTHON实现)_经纬度转换大地2000坐标工具-CSDN博客和百度ai提供的代码:

import ezdxf
doc = ezdxf.new()  # 创建新 DXF 文档
msp = doc.modelspace()  # 获取模型空间# 添加点
msp.add_point((100, 200, 0), dxfattribs={'layer': 'Roads'})# 添加线
points = [(150, 300), (200, 400)]
msp.add_lwpolyline(points, dxfattribs={'layer': 'Buildings'})doc.saveas('output.dxf')

改写了一个能从csv文件转化为dxf文件的程序:

# -*- coding: utf-8 -*-
"""
Created on Wed Mar 19 10:38:48 2025@author: YBK
"""import math
import ezdxf
import csv
doc = ezdxf.new()  # 创建新 DXF 文档
msp = doc.modelspace()  # 获取模型空间def GaussToBLToGauss(longitude, latitude):output = [0.0, 0.0]longitude1, latitude1, longitude0, X0, Y0, xval, yval = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0# ConstantsiPI = 0.0174532925199433  # 3.1415926535898/180.0;a = 6378137.0f = 1 / 298.257222101  # CGCS2000坐标系参数# a=6378137.0; f=1/298.2572236; #wgs84坐标系参数longitude0 = 117.0  # 中央子午线 根据实际进行配置longitude0 = longitude0 * iPI  # 中央子午线转换为弧度longitude1 = longitude * iPI  # 经度转换为弧度latitude1 = latitude * iPI  # 纬度转换为弧度e2 = 2 * f - f * fee = e2 * (1.0 - e2)NN = a / math.sqrt(1.0 - e2 * math.sin(latitude1) * math.sin(latitude1))T = math.tan(latitude1) * math.tan(latitude1)C = ee * math.cos(latitude1) * math.cos(latitude1)A = (longitude1 - longitude0) * math.cos(latitude1)M = a * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256) * latitude1 - (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2* e2 / 1024) * math.sin(2 * latitude1)+ (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024) * math.sin(4 * latitude1) - (35 * e2 * e2 * e2 / 3072) * math.sin(6 * latitude1))xval = NN * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee) * A * A * A * A * A / 120)yval = M + NN * math.tan(latitude1) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24+ (61 - 58 * T + T * T + 600 * C - 330 * ee) * A * A * A * A * A * A / 720)X0 = 500000Y0 = 0xval = xval + X0yval = yval + Y0# 转换为投影output[0] = xvaloutput[1] = yvalreturn outputtry:with open('terra_grid.csv', 'r', encoding='utf-8') as file:reader = csv.reader(file)for row in reader:# Example usage:longitude_input = float(row[0])latitude_input = float(row[1])hight_imput = float(row[2]) - 14.81798172 # 高程校对 - 14.81798172result = GaussToBLToGauss(longitude_input, latitude_input)msp.add_point((result[0], result[1], hight_imput), dxfattribs={'layer': 'dji_gcd'})print(f"Converted Coordinates: X = {result[0]}, Y = {result[1]}")except FileNotFoundError:print("错误:文件不存在!")
except UnicodeDecodeError:print("错误:文件编码非 UTF-8,请尝试 'encoding='gbk'' 或 'latin-1'")
except Exception as e:print(f"未知错误: {e}")doc.saveas('output0319.dxf')

用时记得修改中央子午线值和高程校对值。

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

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

相关文章

AI训练如何获取海量数据,论平台的重要性

引言:数据——AI时代的“新石油” 在人工智能和大模型技术飞速发展的今天,数据已成为驱动技术进步的 “ 燃料 ”。无论是训练聊天机器人、优化推荐算法,还是开发自动驾驶系统,都需要海量、多样化的数据支持。 然而,获…

k8s的存储

一 configmap 1.1 configmap的功能 configMap用于保存配置数据,以键值对形式存储。 configMap 资源提供了向 Pod 注入配置数据的方法。 镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。 etcd限制了文件大小不能超过1M 1.2 configmap的使用…

递归、搜索与回溯第三讲:综合练习

递归、搜索与回溯第三讲:综合练习 1.找出所有子集的异或总和再求和2.全排列3.电话号码的字母组合4.组合5.目标和6.组合总和7.字母大小写全排列8.优美的排列9.N皇后10.有效的数独11.括号生成12.解数独13.单词搜索14.黄金矿工15.不同路径III 有决策树的递归总结&#…

Excel 小黑第12套

对应大猫13 涉及金额修改 -数字组 -修改会计专用 VLOOKUP函数使用(查找目标,查找范围(F4 绝对引用),返回值的所在列数,精确查找或模糊查找)双击填充柄就会显示所有值 这个逗号要中文的不能英…

AI重构工程设计、施工、总承包行业:从智能优化到数字孪生的产业革命

摘要 AI正深度重构工程设计、施工与总承包行业,推动从传统经验驱动向数据智能驱动的转型。本文系统性解析AI当前在智能优化设计、施工过程管理、全生命周期数字孪生等场景的应用,展望未来AI在自动化决策、跨域协同等领域的潜力,并从投入产出…

Java高频面试之集合-15

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:解决哈希冲突有哪些方法? 1. 开放寻址法(Open Addressing) 核心思想:当哈…

vulhub Matrix-Breakout

1.下载靶机,打开靶机和kali虚拟机 2.查询kali和靶机ip 3.浏览器访问 访问81端口有登陆界面 4.扫描敏感目录 kali dirb 扫描 一一访问 robot.txt提示我们继续找找,可能是因为我们的字典太小了,我们换个扫描器换个字典试下,利用kali自带的最大…

docker-compose install nginx(解决fastgpt跨区域)

CORS前言 CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全措施,它允许或拒绝来自不同源(协议、域名、端口任一不同即为不同源)的网页访问另一源中的资源。它的主要作用如下: 同源策略限制:Web 浏览器的同源策略限制了从一个源加载的文档或脚本如何与另一…

【Java】——方法的使用(从入门到进阶)

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 文章目录: 1.方法的概念及使用1.1 什么是方法?1.2 方法的意义1.3 方法的定义…

STM32HAL库,解决串口UART中断接收到的第一个字节数据丢失

1.问题描述: 只有上电后第一次接收到的第一字节数据会丢失,往后再接收也不会存在问题了。 2.先贴出来重写UART中断回调函数 我在接收到第一字节数据后开启定时器中断的,做一个超时处理,每次接收到数据会对定时器计数值清零&…

Linux中安装redis

Redis的安装包,从官方下载下来的是c语言的源码包,我们需要自己编译安装。具体操作步骤如下: 安装redis 上传redis资源包 安装C语言的编译环境 gcc yum install -y gcc-c 解压redis源码在当前目录 tar -zxvf redis-6.2.4.tar.gz 进入解压目录…

基于 SSE 和 WebSocket 的在线文本实时传输工具

简介 在线文本实时传输工具支持 SSE(Server-Sent Events) 和 WebSocket,可在不同设备间快速共享和同步文本,适用于跨设备协作、远程办公和即时通讯。 核心功能 实时同步:文本输入后,另一端用户可立即看到…

【UE5 PuerTS笔记】PuerTS安装

目录 1.下载PuerTS2.下载V83.创建C项目4.拷贝puerts/unreal下的Puerts目录到您项目的Plugins目录下5.解压V8到YouProject/Plugins/Puerts/ThirdParty6.在JsEnv.build.cs中修改UseV8Version设置为你所下载的版本。7.修改CSharpParamDefaultValueMetas.cs文件增加宏定义8.取消引擎…

Baklib企业CMS元数据与协作管理优化

智能元数据驱动协作流程升级 在现代企业内容管理中,智能元数据系统已成为提升协作效率的核心引擎。通过自动化标签分类与语义分析技术,Baklib实现了文档属性的动态结构化映射,使跨部门协作中的信息检索效率提升超40%。其可视化流程编辑器支持…

从零开始实现 C++ TinyWebServer Buffer类详解

文章目录 为什么需要Buffer缓冲区?Buffer 设计Buffer 成员变量实现 ReadFD() 函数实现 WriteFD() 函数实现 MakeSpace() 函数Buffer 代码Buffer 测试 在网络编程中,Buffer(缓冲区)是一个非常重要的概念,它可以帮助我们…

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…

《线程池:Linux平台编译线程池动态库发生的死锁问题》

关于如何编译动态库可以移步《Linux:动态库动态链接与静态库静态链接》-CSDN博客 我们写的线程池代码是闭源的,未来想提供给别人使用,只需要提供so库和头文件即可。 系统默认库文件路径为: usr/lib usr/loacl/lib 系统默认头文件…

Vmware中的centos7连接上网

有很多刚刚开始配置了centos7,然后发现不能上网现在来解决这个问题。 测试能不能上网 先还原这个设置,如果没有动过的话就不用,连接模式是NAT模式 然后进去设置网络环境,记得是用超级用户设置 vi /etc/sysconfig/network-script…

Nvidia 官方CUDA课程学习笔记

之前心血来潮学习了一下Nvidia CUDA,外行,文章有理解不当的地方,望指正。 主要根据以下Nvidia官方课程学习: https://www.bilibili.com/video/BV1JJ4m1P7xW/?spm_id_from333.337.search-card.all.click&vd_sourcec256dbf86b…

Harmony 配置环境,创建,运行项目

Harmony 配置环境,创建,运行项目 1 .安装IDE 鸿蒙应用开发需要使用配套的IDE——HUAWEI DevEco Studio 获取DevEco Studio安装包,官方下载地址为:https://developer.huawei.com/consumer/cn/deveco-studio/ 解压之后双击deveco-s…