首页 > 其他分享 >使用qgis.core模块快速转换s57数据

使用qgis.core模块快速转换s57数据

时间:2024-10-23 17:09:53浏览次数:5  
标签:info core layer name qgis sublayer s57 图层

import os
from qgis.core import (
    QgsVectorLayer,
    QgsVectorFileWriter
)


# 解析 S57 图层信息的函数
def extract_s57_layer_info(s57layers: list[str]) -> list[tuple]:
    extracted_info = []
    
    # 内部的解析函数
    def parse_layer_info(layer_info):
        # 以 "!!::!!" 分割字符串
        parts = layer_info.split('!!::!!')

        # 提取序号、图层名称、几何类型
        layer_id = parts[0]  # 序号
        layer_name = parts[1]  # 图层名称
        geometry_type = parts[3]  # 几何类型

        return layer_id, layer_name, geometry_type

    # 遍历所有图层,解析并存储信息
    for layer in s57layers:
        layer_id, layer_name, geometry_type = parse_layer_info(layer)
        extracted_info.append((layer_id, layer_name, geometry_type))

    return extracted_info


def main():
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    # 加载 S57 文件为 OGR 数据源
    data_source_uri = f"{s57_file}"
    # 加载 S57 文件的所有图层到项目
    layer = QgsVectorLayer(data_source_uri, "S57 Layer", "ogr")
    if not layer.isValid():
        print(f"S57 文件 '{s57_file}' 无法加载为图层")
    else:
        # 加载 S57 文件的所有子图层到图层组中
        sublayers = layer.dataProvider().subLayers()
        sublayers_info = extract_s57_layer_info(sublayers)
        for sublayer_info in sublayers_info:
            sublayer_id, sublayer_name, geometry_type = sublayer_info
            # 构建子图层的 URI
            sublayer_uri = f"{s57_file}|layername={sublayer_name}"
            # 加载子图层
            sublayer = QgsVectorLayer(sublayer_uri, sublayer_name, "ogr")
            if geometry_type == "None":
                continue
            if sublayer.isValid():
                # 构建输出文件路径
                output_file = os.path.join(output_folder, f"{sublayer_name}_{geometry_type}.shp")
                # 导出图层为 Shapefile 格式
                error = QgsVectorFileWriter.writeAsVectorFormat(
                    layer, output_file, "UTF-8", layer.crs(), "ESRI Shapefile"
                )
                if error == QgsVectorFileWriter.NoError:
                    print(f"图层 '{sublayer_name}' ({geometry_type}) 成功导出为 '{output_file}'")
                else:
                    print(f"图层 '{sublayer_name}' 导出失败: {error}")
            else:
                print(f"子图层 '{sublayer_name}' 转换失败")

        print(f"S57 文件 '{s57_file}' 的所有子图层已转换完成 '{output_folder}'")


if __name__ == '__main__':
    # S57 文件路径
    s57_file = r"G:\GIS-DATA\s57\C1515435.000"
    # 输出文件夹路径
    output_folder = r"G:\GIS-DATA\s57\test"
    main()

标签:info,core,layer,name,qgis,sublayer,s57,图层
From: https://www.cnblogs.com/echohye/p/18497849

相关文章

  • wsl ubuntu20.04设置core文件生成路径
    1.首先要确定允许生成core文件#在终端执行下列命令,执行后仅本次会话有效,如需每次都生效,可以添加到~/.bashrc文件中ulimit-cunlimited2.查看core文件的生成目录cat/proc/sys/kernel/core_pattern3.临时设置core文件的生成目录#先切换到root用户,然后输入,其中./表示生......
  • afcore.dll文件丢失影响Omega Strikers运行?Omega Strikers玩家必看afcore.dll文件丢失
    在沉浸于OmegaStrikers这款快节奏、竞技性强的游戏时,突然遭遇afcore.dll文件丢失的问题,无疑会给玩家带来不小的困扰。这一关键文件的缺失,可能导致游戏无法正常启动、运行卡顿,甚至频繁崩溃,严重影响游戏体验。然而,面对这一挑战,玩家无需过度焦虑,因为通过一系列自救措施,你完全有能......
  • api-ms-win-core-synch-l1-1-0.dll丢失怎么办?dll缺失解决方法
    当您遇到“api-ms-win-core-synch-l1-1-0.dll丢失”错误时,这通常意味着您的Windows系统中一个重要的动态链接库文件(DLL文件)缺失或损坏,这可能会影响到某些应用程序的正常运行。别担心,这个问题可以通过几个步骤来解决。下面是一份详细的指导文档,帮助您解决这一问题:api-ms-win-c......
  • 在iOS开发中如何使用Core Data管理数据持久化
    摘要:在iOS开发中运用CoreData管理数据持久化包括以下要点:1、掌握CoreData框架基础;2、实现数据模型的设计;3、熟悉数据存储与检索;4、利用上下文管理数据;5、数据迁移和版本控制。在这其中,数据模型的设计是核心,它影响整个应用的数据结构和未来的扩展性。数据模型设计指的是在Xcode中......
  • 当coretypes.dll守护者缺席:一键解锁应用程序故障自救秘籍
    在计算机的世界里,每一个小小的文件都承载着巨大的责任。而coretypes.dll,这个看似不起眼的动态链接库文件,却是许多应用程序正常运行的守护神。它负责提供核心类型定义和功能支持,一旦丢失或损坏,你的应用程序可能会立刻陷入困境,出现无法启动、崩溃或功能异常等问题。然而,面对这......
  • .net core web api授权、鉴权、API保护
    前言本文整理asp.netcorewebAPI的授权、鉴权以及注册验证、API保护一系列常用技术手段。本文所有的实现代码可以参考:https://gitee.com/xiaoqingyao/web-app-identity.git用户管理授权和鉴权的前提是要有一个用户管理模块,.net提供一个现有的Identity组件,帮我们完成了大部......
  • EF Core进行增删改查
    1.使用nuge添加引用(程序资源管理器)2.program.csusingFluentAssertions.Common;usingMicrosoft.EntityFrameworkCore;usingMicrosoft.Extensions.Configuration;usingNetModelCore02.Models;varbuilder=WebApplication.CreateBuilder(args);//Addservicesto......
  • .NET Core SqlSugar
    概念:1.官方文档:https://www.donet5.com/Home/Doc?typeId=11802.在vsstudio中导包SqlSugarCore创建模型类:1.vsstudio2022中选择项目2.选择6.03.projram.csusingSqlSugar;varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontain......
  • C#/.NET/.NET Core技术前沿周刊 | 第 10 期(2024年10.14-10.20)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。每......
  • ARM CORELINK是什么?
    ARMCoreLink是ARM公司开发的一系列系统IP(知识产权)产品,用于连接和管理片上系统(SoC)中的各个组件。它是ARM系统设计生态系统的重要组成部分,旨在帮助芯片设计者更快速、更高效地开发复杂的SoC设计。让我为您详细介绍一下ARMCoreLink:主要功能:互连:提供高性能、低延迟的......