ezdxf -- 将 EPSG 3395 纬度经度十进制坐标转换为 WCS 坐标以保存修改后的 DXF 文件

问题描述 投票:0回答:1

测试器中的所有实体

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
python latitude-longitude dxf ezdxf
1个回答
0
投票

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 实体的文档以了解限制。

  • 仅适用于局部网格(线性)变换
  • 仅适用于已知的 CRS 配置
  • GEODATA 版本 1 并未得到真正支持(无文档)
© www.soinside.com 2019 - 2024. All rights reserved.