在外部编译器中使用pyqgis

news2024/12/28 5:37:25

pyqgis_dragonzoebai的博客-CSDN博客 升级后整理

例如在vscode当中添加qgis提供的python解释器,那么就可以使用qgis.core等库

 

批量处理gdb文件夹,导出对应文件夹目录的geojson文件。

我的gdb文件均没有坐标系,因此需要自己设置正确的坐标系,导出时为4326坐标系。

处理的时候新增了一个字段,并将文件名写入到该字段中。

from qgis.core import *
from qgis.PyQt.QtCore import QVariant
import os

inputCRS = QgsCoordinateReferenceSystem('EPSG:4549')  # 根据经验判断原始坐标系
outputCRS = QgsCoordinateReferenceSystem('EPSG:4326')  # 输出时的坐标系

inputFolder = r'D:\项目\GIS数据库'
outputFolder = r"D:\项目\处理1"

# 处理文件夹
def dealGDBFolder(inputFolder,outputFolder):
    # 检查输入文件夹,如果不存在则返回
    if not os.path.exists(inputFolder):
        print("检查输入文件夹不存在!!!")
        return

    # 检查输出文件夹,如果不存在则创建
    if not os.path.exists(outputFolder):
        print("检查输出文件夹不存在!!!即将创建")
        # os.mkdir(outputFolder) # 创建单层文件夹
        os.makedirs(outputFolder) # 创建多层文件夹

    # 检查输出文件夹子文件夹,如果不存在则创建
    fileName = os.path.split(os.path.realpath(inputFolder))[1]
    outputFolderResult = os.path.join(outputFolder, fileName)
    # print(outputFolderResult)
    if not os.path.exists(outputFolderResult):
        os.mkdir(outputFolderResult)


    for item in os.listdir(inputFolder):
        print(item)
        file_name, file_extension = os.path.splitext(item)
        # 如果是文件夹则递归执行
        if (file_extension == ''):
            dealGDBFolder(os.path.join(inputFolder, item),outputFolder)
            # 如果扩展名为gdb则执行下面的函数
        elif (file_extension.lower() == '.gdb'):
            file_full_name = os.path.join(inputFolder, item)
            dealGDBFile(file_full_name, outputFolderResult, file_name)


# 处理gdb文件
def dealGDBFile(file_full_name, outputFolderResult, file_name):
    # 加载gdb
    gdbLayer = QgsVectorLayer(file_full_name, file_name)
    # 获取里面的子图层
    subLayers = gdbLayer.dataProvider().subLayers()
    for subLayer in subLayers:
        parts = subLayer.split('!!::!!')
        print(file_name + ";" + parts[1] + ";" + parts[2])
        layerName = parts[1]
        lpath = r"{}|layername={}".format(file_full_name, layerName)
        # 原始矢量图层没有坐标系则添加正确的坐标系
        olayer = QgsVectorLayer(lpath, file_name + " " + layerName, "ogr")
        olayer.setCrs(inputCRS)
        # 新增字段
        fdAdd1 = QgsField("layer_name", QVariant.String, comment='图层名')
        olayer.addExpressionField("'" + file_name + "'", fdAdd1)
        olayer.updateFields()
        # 另存为geojson文件,并转换坐标系
        QgsVectorFileWriter.writeAsVectorFormat(olayer, outputFolderResult +"\\" + file_name + " " + layerName + ".geojson", "utf-8", outputCRS, 'GeoJson', 0)
        # 加载到当前视图
        # QgsProject.instance().addMapLayer(olayer)


dealGDBFolder(inputFolder,outputFolder)
print("处理完成")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python网页的SEO优化指南

Python 网页的 SEO 优化指南 在如今互联网高度竞争的时代,一个网站的优化已经成为了至关重要的一环,特别是 SEO 优化。而对于使用 Python 开发网站的人来说,如何进行 SEO 优化,也是需要着重考虑的问题。本文将介绍一些 Python 网…

BGP选路规则实验

1、BGP选路规则实验-基础配置 1)拓扑 2)基础配置 第一步:基础配置: R1的配置: sysname R1 # interface GigabitEthernet0/0/0 ip address 192.168.12.1 255.255.255.0 # interface GigabitEthernet0/0/1 ip addres…

DeiT详解:知识蒸馏的Transformer

DeiT详解:知识蒸馏的Transformer 0. 引言1. ViT2. DeiT2.1 知识蒸馏2.1.1 提出背景2.1.2 理论原理 2.2 DeiT模型 3. 总结 0. 引言 针对 ViT 需求数据量大、运算速度慢的问题,Facebook 与索邦大学 Matthieu Cord 教授合作发表 Training data-efficient i…

工控机设备安全-系统加固分析

工控设备安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工…

倾斜摄影三维模型数据的高程偏差修正的几何纠正技术方法探讨

倾斜摄影三维模型数据的高程偏差修正的几何纠正技术方法探讨 倾斜摄影是一种先进的数字摄影技术,可以生成高分辨率、高精度的三维模型数据。然而,在倾斜摄影中,由于相机的倾斜角度和地形的高程差异,可能会出现高程偏差问题。为了…

Java性能权威指南-总结4

Java性能权威指南-总结4 Java性能调优工具箱操作系统的工具和分析CPU运行队列磁盘使用率网络使用率 Java监控工具基本的VM信息 Java性能调优工具箱 操作系统的工具和分析 CPU运行队列 快速小结 检查应用性能时,首先应该审查CPU时间。优化代码的目的是提升而不是…

树莓派初体验:开机啦

感谢大佬的赞助,这玩意是真的贵哇,呜呜呜呜呜呜,根本买不起 一、烧录系统 需要:SD卡(推荐16G)、读卡器(推荐高速读卡器) 进入官网:https://www.raspberrypi.com/softwa…

《MYSQL必知必会》读书笔记2

哈夫曼树的学习: http://t.csdn.cn/XJhUI 创建计算字段 字段:基本上与列的意思相同(数据库列一般称为列,而字段通常用于计算字段连接上) 拼接字段 拼接:将值联结到一起构成单个值 把两个结拼接起来&a…

【2023最叼教程】Appium自动化环境搭建保姆级教程

APP自动化测试运行环境比较复杂,稍微不注意安装就会失败。我见过不少朋友,装了1个星期,Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作,但是 Appium 安装过程中确实存在不少隐藏的比较深的坑,如果…

编程(38)----------计算机的部分原理

本篇主要总结一些计算机的理论部分. 计算机在发展历程中,无论是最早的巨无霸机器,还是现在小到可以拿在手中的掌机.只要其本质上是计算机,在最基础的结构上,都是以冯诺依曼体系所构建的. 冯诺依曼体系大致将计算机分为几个最重要的部分:输入,输出,中央处理器,存储设备.也就是…

Meta Quest 3发布:超越虚拟现实全新境界

2023年6月2日凌晨,全球领先的虚拟现实技术公司Meta隆重推出了Meta Quest 3无线头戴式显示器。这款全新设计的头戴设备从内到外焕然一新,为用户提供了全方位的体验。 借助全新一代骁龙芯片,Meta Quest 3拥有比Quest 2更高两倍的GPU处理能力&am…

VanillaNet详解:极简的网络模型

VanillaNet详解:极简的网络模型 0. 引言1. 网络结构2. 如何提高简单网络的非线性2.1 深度训练策略2.2 基于级数启发的激活函数3. 实验4. 代码解析总结 0. 引言 深度学习模型架构越复杂越好吗? 自过去的几十年里,人工神经网络取得了显著的进…

chatgpt赋能python:Python在硬件开发中的作用

Python在硬件开发中的作用 随着物联网的快速发展,越来越多的硬件设备需要与互联网连接。Python在硬件开发过程中扮演着重要的角色。 Python的优势 作为一种高级编程语言,Python有以下几个优势: 简单易学:Python的语法简洁清晰…

chatgpt赋能python:Python做网页可以直接访问吗?

Python做网页可以直接访问吗? Python作为一门功能强大的编程语言,近年来在Web开发中也越来越受欢迎。很多人或企业都采用Python来开发网站和网页,那么问题来了,Python做的网页能否直接被搜索引擎访问和索引呢? Pytho…

MySQL5-事务隔离级别和锁机制

❤️ 个人主页:程序员句号 🚀 支持水滴:点赞👍 收藏⭐ 留言💬关注 🌸 订阅专栏:MySQL性能调优 原创博文、基础知识点讲解、有一定指导意义的中高级实践文章。 认真或有趣的技术分享。 该专栏陆…

【数据结构】数据结构与算法基础 课程笔记 第七章 查找

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:【数据结构】 💬总结:希望你看完之后,…

Emacs之解决gtags -i --single-update占用率100%卡死问题(一百零六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

python --自动化测试UiAutomator2

安装adb 安装adb后使用命令 adb devices 出现下图即可; 安装python依赖(uiautomator2,weditor) pip install uiautomator22.16.23 weditor0.6.8 -i https://pypi.doubanio.com/simple# 在手机上安装 atx-agent 应用 # 安装apk服务到手机上 python -m uiautomator2 init脚本…

基于 Docker 部署 Mysql8.0.27_单机_主从复制

文章目录 单机部署集群部署master 部署slave 部署错误记录 单机部署 通过 dockerhub 或 docker search 查找镜像。拉取 mysql 镜像。 docker pull mysql:8.0.27创建挂载目录,并赋予权限。 mkdir -p /var/docker_data/mysql/data mkdir -p /var/docker_data/mysql/co…

一些关于c++的琐碎知识点

目录 bool强转 const构成重载:const修饰*p 移动构造 new int (10)所做的四件事 this指针---为什么函数里面需要this指针? .和->的区别 new创建对象 仿函数 new和malloc的区别 c系统自动给出的函数有 delete和delete[ ]区别何在 检查有没有析构函数 e…