测试器中的所有实体
DXF
都是TEXT
或LWPOLYLINE
。
我的目标是将
LWPOLYLINE
中所有图层中的所有 TEXT
和 DXF
实体从 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()
# Get the geo location information from the DXF file:
geo_data = msp.get_geodata()
if geo_data:
# Get transformation matrix and epsg code:
m, epsg = geo_data.get_crs_transformation()
else:
# Identity matrix for DXF files without geo reference data:
m = Matrix44()
epsg = 3395
geo
插件实现了__geo_interface__
,这里不需要。
import ezdxf
from ezdxf import transform
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:
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.")
请阅读 GEODATA 实体的文档以了解限制。