0
点赞
收藏
分享

微信扫一扫

go中引入自己写的库时候,一旦导入就被删除掉

北冥有一鲲 2024-05-29 阅读 4

目录

一、装环境

这里搞的人头疼,装了一大堆,各种报错,最后也不知道是靠哪个包运行成功的,反正成了

1、下载 ODAFileConverter

从Open Design Alliance官网(ODA文件转换器下载页面)下载适用于Ubuntu的DEB包。

2、安装 ODAFileConverter

(1)、安装 gdebi 来处理依赖关系

sudo apt update
sudo apt install gdebi-core

(2)、使用 gdebi 安装 DEB 包

gdebi ODAFileConverter_QT6_lnxX64_8.3dll_25.4.deb

3、解决 libxcb库问题

现代的Ubuntu版本(例如22.04)可能缺少 libxcb-util.so.0 库。可以通过创建符号链接来解决这个问题:

(1)、安装依赖

sudo apt-get update
sudo apt-get -f install
sudo apt install libxcb-xinerama0 libxcb-util1 libxkbcommon-x11-0 libglu1-mesa libxrender1 libxi6 libxrandr2 xvfb gdal-bin

安装qt

apt-get install aptitude
sudo aptitude install qt5-default qtbase5-dev qtbase5-dev-tools
echo 'export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms' >> ~/.bashrc
echo 'export QT_QPA_PLATFORM=xcb' >> ~/.bashrc
source ~/.bashrc

(2)、确认 libxcb-util.so.1 是否存在

ls /usr/lib/x86_64-linux-gnu/libxcb-util.so.1

(3)、创建符号链接

cd /usr/lib/x86_64-linux-gnu
sudo ln -s libxcb-util.so.1 libxcb-util.so.0

4、安装python包

conda install -c conda-forge gdal
pip install ezdxf

二、上代码

from ezdxf.addons import odafc
import ezdxf
from osgeo import ogr
import sys
import os
import json
import re

class file2geo:
    def __init__(self, filepath):
        self.filepath = filepath
        # self.layername = layername
    def dwg2txt(self):
        dxf_file = os.path.join(os.path.dirname(DWG_path), os.path.basename(DWG_path).split(".")[0] + ".dxf")
        # dwg文件转换为2000格式的dxf文件, 因为ogr不支持读取高版本dwg
        odafc.convert(self.filepath, dxf_file, version='R2000', replace=True)  
        only_txt = dict()
        only_txt['TEXT'] = []
        # 打开DXF文件
        doc = ezdxf.readfile(dxf_file)
        # 获取所有TEXT类型的实体
        texts = doc.modelspace().query('TEXT')
        # 提取文本内容
        for text in texts:
            decoded_str = re.sub(r'\\U\+([0-9A-Fa-f]{4})', lambda m: chr(int(m.group(1), 16)), text.dxf.text)
            only_txt['TEXT'].append(decoded_str)
            print(decoded_str)
        
        self.save_to_json(only_txt)

    def dwg2data(self):
        dxf_file = os.path.join(os.path.dirname(self.filepath), os.path.basename(self.filepath).split(".")[0] + ".dxf")
        odafc.convert(self.filepath, dxf_file, version='R2000', replace=True)  
        
        doc = ezdxf.readfile(dxf_file)
        msp = doc.modelspace()

        data = {}
        
         # 获取TEXT实体
        texts = msp.query('TEXT')
        text_data = []
        for text in texts:
            decoded_str = re.sub(r'\\U\+([0-9A-Fa-f]{4})', lambda m: chr(int(m.group(1), 16)), text.dxf.text)
            text_info = {
                'text': decoded_str,
                'insert': (text.dxf.insert[0], text.dxf.insert[1]),
                'height': text.dxf.height,
                'rotation': text.dxf.rotation,
                'style': text.dxf.style,
                'layer': text.dxf.layer
            }
            text_data.append(text_info)
        data['TEXT'] = text_data
        
        self.save_to_json(data)

    def save_to_json(self,dicts):
        output_path = os.path.join(os.path.dirname(DWG_path), os.path.basename(DWG_path).split(".")[0] + "_dwg" + ".json")
        with open(output_path, 'w', encoding='utf-8') as f:
            json.dump(dicts, f, ensure_ascii=False, indent=4)

# 示例调用
if __name__ == "__main__":
    # DWG文件路径
    DWG_path = "/path/to/your/data.dwg"
    # 创建file2geo实例
    converter = file2geo(DWG_path)
    # 调用dwg2txt方法查看内容并保存
    converter.dwg2txt()
    # converter.dwg2data()

举报

相关推荐

0 条评论