使用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
相关产品推荐
相关产品推荐

