You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ezdxf将EPSG3395坐标转换为WCS并保存修订DXF文件

DXF坐标转换问题及代码尝试

2023年12月26日更新

该DXF文件通过QGIS 3.34的“导出项目为DXF”功能创建。虽导出时设置为EPSG 3395,但该坐标系统未在dxf.coordinate_type中配置。结合相关回答与原有代码,实现如下:

import ezdxf
from ezdxf import transform
from ezdxf.math import Matrix44

CRS_TO_WCS = True

doc = ezdxf.readfile("tester.dxf")
msp = doc.modelspace()
geo_data = msp.get_geodata()


def wcs_to_crs(entities, m):
    transform.inplace(entities, m)

def crs_to_wcs(entities, m):
    m = m.copy()
    m.inverse()
    transform.inplace(entities, m)

if geo_data:
    # 获取转换矩阵和EPSG代码:
    m, epsg = geo_data.get_crs_transformation()
else:
    # 无地理参考的DXF文件使用单位矩阵:
    m = Matrix44()
    epsg = 3395

if geo_data:
    m, epsg = geo_data.get_crs_transformation()
    if CRS_TO_WCS:
        crs_to_wcs(msp)
    else:
        wcs_to_crs(msp)
else:
    print("No geo reference data available.")

运行结果为:No geo reference data available.(无地理参考数据可用)

我将单独提问以设置CRS参数。


测试用DXF文件中的实体均为TEXT或LWPOLYLINE类型。

我的需求是递归将DXF所有图层中的LWPOLYLINE和TEXT实体从EPSG 3395(十进制度数经纬度)转换为WCS坐标,并保存为新DXF文件。

请问应使用crs_to_wcs还是globe_to_map?是否有示例展示具体步骤?

以下是参考ezdxf文档修改的Python代码:

import ezdxf
from ezdxf.math import Matrix44
from ezdxf.addons import geo

doc = ezdxf.readfile("tester.dxf")

msp = doc.modelspace()

# 从DXF文件中获取地理定位信息:
geo_data = msp.get_geodata()
if geo_data:
    # 获取转换矩阵和EPSG代码:
    m, epsg = geo_data.get_crs_transformation()
else:
    # 无地理参考的DXF文件使用单位矩阵:
    m = Matrix44()
    epsg = 3395

内容的提问来源于stack exchange,提问作者iembry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:01:36