当前位置: 首页 > news >正文

【GIS教程】使用GDAL实现栅格转矢量(GeoJSON、Shapefile)- 附完整代码

文章目录

  • 一、 应用场景
    • 1、GeoJSON
    • 2、ESRI Shapefile
    • 3、GDAL
  • 二、基本思路
    • 1、数据准备
    • 2、重投影(可选)
    • 3、创建空的矢量图层
    • 4、栅格转矢量
  • 三、完整代码
  • 四、总结
  • 五、拓展(使用ArcGIS工具进行栅格转矢量)

一、 应用场景

TIFF格式的影像数据包含了丰富的地理信息,但是直接使用栅格数据进行分析和规划存在一定的局限性,因为栅格数据不利于进行空间查询和属性分析。

因此我们可以将这些栅格TIFF数据转换为矢量格式,以便更好地进行空间分析和数据集成。

1、GeoJSON

GeoJSON是一种基于JSON(JavaScript Object Notation)的格式,用于在Web应用程序中编码各种地理数据结构。它能够描述几何、拓扑关系、属性和地理空间数据的其他特征,非常适合于矢量化处理和空间分析。

GeoJSON 的关键特性:

  • 1、基于JSON: GeoJSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
  • 2、几何类型: GeoJSON支持多种几何类型,包括点(Point)、线(LineString)、线环(LinearRing)、多边形(Polygon)、多点(MultiPoint)、多线(MultiLineString)、多多边形(MultiPolygon)和几何集合(GeometryCollection)。
  • 3、特征(Feature): GeoJSON中的一个“特征”(Feature)是一个包含几何对象和属性的对象。特征可以代表地图上的一个实体,如一个城市或一条河流。
  • 4、特征集合(FeatureCollection): 特征集合是一组特征的集合,可以用来表示多个地理实体。
  • 5、属性: 每个特征都可以有一个与之关联的属性对象,该对象存储了关于特征的信息,例如名称、类型或其他描述性数据。
  • 6、 坐标参考系统: GeoJSON 对象可以包含一个“坐标参考系统”(CRS)属性,用来指定坐标系统,最常见的是WGS84(EPSG:4326)。

2、ESRI Shapefile

SHP(Shapefile)是一种广泛使用的矢量数据存储格式,由美国ESRI开发,它主要用于存储地理信息系统(GIS)中的点、线或多边形数据,一个完整的Shapefile由以下文件组成:

  • .shp文件:这是Shapefile的主文件,包含几何图形的几何信息,即空间坐标数据

  • .shx文件:这是Shapefile的索引文件,用于存储.shp文件中要素的位置,加快数据访问速度

  • .dbf文件:这是Shapefile的属性数据文件,存储每个几何图形的属性信息,如名称、类型等,采用dBase IV格式

除了这三个必须的文件外,Shapefile还可以包括以下可选文件:

  • .prj文件:包含地图投影的信息,定义了数据的坐标系和投影信息

  • .sbn和.sbx文件:这些是Shapefile的空间索引文件,提供了额外的空间查询性能,用于支持空间索引的快速查找

  • .xml文件:包含Shapefile的元数据信息

  • .cpg文件:存储的是属性表编码,例如ANSI或UTF-8,如果SHP打开属性表乱码很可能就是CPG文件出问题了

3、GDAL

GDAL(Geospatial Data Abstraction Library)是一个开源的地理空间数据处理库,它提供了强大的数据转换功能。通过编写一段GDAL命令或脚本,可以将栅格TIFF文件转换为矢量格式。


二、基本思路

1、数据准备

输入数据: 栅格数据可以是遥感图像,DEM地形,也可以是经过栅格计算后提取的坡度坡向等数据。格式为tif。 栅格数据的像元值通常为整数,每个整数代表栅格的一种颜色或类别。

输出数据: 需要定义输出的矢量数据的格式,一般而言,栅格转面要素的情况最常见。在转换过程中,可以选择一个字段,该字段的值将被用来指定输出面要素的属性。默认情况下,这个字段是“Value”,它包含了每个栅格像元中的值。

栅格转矢量的输出格式可以是GeoJSON,也可以是shapefile

这里使用DEM数据作为输入数据。
在这里插入图片描述

2、重投影(可选)

数据重投影是一个很常见的处理方法,将图像或数据集从一个地理坐标系统转换到另一个坐标系统。这项技术对于确保数据的一致性和可用性至关重要,尤其是在处理来自不同来源和不同坐标系统的数据时。

之前博客【GIS教程】使用Arcpy+GDAL批量投影并批量生成COG文件-附完整代码 中介绍了使用Arcpy进行批量投影的方法,本篇补充使用GDAL函数修改栅格数据的坐标系

使用函数gdal.Warp

# 打开源TIF文件
input_tif = r'C:\yourpath\Desktop\input.tif' #源栅格数据路径
prj_tif = r'C:\yourpath\Desktop\prj_output.tif' #投影后的栅格数据路径
raster_dataset = gdal.Open(input_tif, gdal.GA_ReadOnly) # 读取源数据# 设置目标坐标系为WGS84(EPSG:4326)
target_srs = osr.SpatialReference()
target_srs.ImportFromEPSG(4326)# 使用gdal.Warp进行坐标系转换,并生成重投影的TIF文件
gdal.Warp(prj_tif, raster_dataset, dstSRS=target_srs)# 关闭数据集
raster_dataset = None

得到的prj_tif即为重投影后的栅格数据。

3、创建空的矢量图层

在GDAL中创建空的矢量图层是为了初始化一个具有特定几何类型和属性结构的空间数据容器,以便后续能够将几何要素和属性数据写入其中,从而构建完整的矢量数据集。

使用函数data_source.CreateLayer,需要定义矢量格式、坐标系、图层以及属性字段

#定义坐标系
prj = osr.SpatialReference()
prj.ImportFromEPSG(4326)# 创建一个空的矢量图层:GeoJOSN
output_file = r'C:\yourpath\Desktop\result.geojson'
driver = ogr.GetDriverByName('GeoJSON') data_source = driver.CreateDataSource(output_file) #这里添加输出文件路径
# polygons为geojson的"name"参数,geom_type为类型,prj为定义的坐标系。
layer = data_source.CreateLayer('polygons', geom_type=ogr.wkbPolygon, srs = prj)
# 定义矢量属性,不可省略
layer.CreateField(ogr.FieldDefn('value', ogr.OFTReal))# 创建一个空的矢量图层:Shapefile
output_file = r'C:\yourpath\Desktop\result' #路径为文件夹
driver = ogr.GetDriverByName('ESRI Shapefile') data_source = driver.CreateDataSource(output_file) #这里添加输出文件路径
# polygons为geojson的"name"参数,geom_type为类型,prj为定义的坐标系。
layer = data_source.CreateLayer('polygons', geom_type=ogr.wkbPolygon, srs = prj)
# 定义矢量属性,不可省略
layer.CreateField(ogr.FieldDefn('value', ogr.OFTReal))

4、栅格转矢量

使用函数gdal.Polygonize:将每个像元转成一个矩形,然后将相似的像元进行合并。

Polygonize(Band srcBand, Band maskBand, Layer outLayer, int iPixValField, char ** options=None, GDALProgressFunc callback=0, void* callback_data=None) -> int

#读取栅格波段
tmp_dataset = gdal.Open(input_tif, gdal.GA_ReadOnly) # 读取栅格数据
tmp_band = tmp_dataset.GetRasterBand(1) # 最后想要转为矢量的波段,单波段是1
mask_band = tmp_band.GetMaskBand() # 定义掩膜范围 # 将栅格数据转换为矢量多边形
# outLayer 是定义好的矢量的图层Layer
gdal.Polygonize(srcBand=tmp_band, maskBand=mask_band, outLayer=layer, iPixValField=0)

输出结果:GeoJSON
在这里插入图片描述
输出结果:Shapefile
在这里插入图片描述
在这里插入图片描述

三、完整代码

# 栅格转geojson实验代码
import os
from osgeo import gdal, ogr, osrdef reproject_raster(input_tif, prj_tif, target_epsg):# 打开源TIF文件raster_dataset = gdal.Open(input_tif, gdal.GA_ReadOnly)# 设置目标坐标系target_srs = osr.SpatialReference()target_srs.ImportFromEPSG(target_epsg)# 使用gdal.Warp进行坐标系转换,并生成临时重投影的TIF文件gdal.Warp(prj_tif, raster_dataset, dstSRS=target_srs)# 关闭数据集raster_dataset = Nonedef create_empty_vector(output_file, target_epsg):prj = osr.SpatialReference()prj.ImportFromEPSG(target_epsg)# 创建一个空的矢量图层driver = ogr.GetDriverByName('GeoJSON') #修改 GeoJSON 或 ESRI Shapefiledata_source = driver.CreateDataSource(output_file)layer = data_source.CreateLayer('polygons', geom_type=ogr.wkbPolygon,srs = prj)layer.CreateField(ogr.FieldDefn('value', ogr.OFTReal))return data_source, layerdef raster_to_vector(input_tif, output_file):# 对input_tif进行重投影tmp_tif = "temp.tif" # 中间的重投影文件,视为过程文件target_epsg = 4326reproject_raster(input_tif, tmp_tif, target_epsg)# 打开重投影后的TIF文件tmp_dataset = gdal.Open(tmp_tif, gdal.GA_ReadOnly)tmp_band = tmp_dataset.GetRasterBand(1)mask_band = tmp_band.GetMaskBand()# 创建空矢量图层data_source, layer = create_empty_vector(output_file, target_epsg)# 将栅格数据转换为矢量多边形gdal.Polygonize(srcBand=tmp_band, maskBand=mask_band, outLayer=layer, iPixValField=0)# 关闭数据源和数据集data_source.Destroy()tmp_dataset = Noneos.remove(tmp_tif)  # 移除中间文件# 使用函数
input_tif = r'C:\yourpath\Desktop\input.tif'
output_file = r"C:\yourpath\Desktop\output.geojson"
raster_to_vector(input_tif, output_file)

四、总结

GDAL栅格转矢量是将栅格数据(像素表示的连续数据)转换为矢量数据(离散的几何对象)的过程,通常涉及重投影gdal.Warp、创建空矢量图层data_source.CreateLayer、使用gdal.Polygonize函数将栅格像素转换为矢量多边形,并最终编辑和保存转换结果,以便进行空间分析和GIS应用。

五、拓展(使用ArcGIS工具进行栅格转矢量)

操作步骤:

  • 1、查看数据类型,【浮点型】数据需要转为【整型】,类型转换:【spatial analyst】- 【数学分析】-【转为整型】工具。

  • 2、栅格转面【转换工具】-【由栅格转出】-【栅格转面工具】

相关文章:

【GIS教程】使用GDAL实现栅格转矢量(GeoJSON、Shapefile)- 附完整代码

文章目录 一、 应用场景1、GeoJSON2、ESRI Shapefile3、GDAL 二、基本思路1、数据准备2、重投影(可选)3、创建空的矢量图层4、栅格转矢量 三、完整代码四、总结五、拓展(使用ArcGIS工具进行栅格转矢量) 一、 应用场景 TIFF格式的…...

美国加州房价数据分析02

5. 特征工程 5.1重构数据集 承接上文提到的相似度排名,去掉部分无关的特征。 train_set.corr()["median_house_value"].sort_values(ascendingFalse)为了提高模型训练后的鲁棒性,即防止过拟合,不建议删除关联度最低几项特征&#…...

[安徽省赛 2021]misc签到

给了一个图片,改成jpg格式,查看属性 发现备注 this_is_password 这可能是密码什么东西的 把图片拉到kali里面用用工具binwalk工具分离 发现了flag.txt文件 把压缩包拉到windows系统中 解压,输入密码 得到flag NSSCTF{ab32056rfanla12380a…...

LeetCode:1705. 吃苹果的最大数目(优先级队列 + 贪心 Java)

目录 1705. 吃苹果的最大数目 题目描述: 实现代码与解析: 优先级队列 贪心 原理思路: 1705. 吃苹果的最大数目 题目描述: 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天&#x…...

MX3200显微尺寸测量仪

产品简介 MX3200显微尺寸测量仪将显微成像与传统影像测量相结合,实现了微小特征的大范围测量。配置电动塔台,可自动切换到不同的倍率,探测各种精密微观二维尺寸特征。尺寸测量功能丰富,可进行各种二维尺寸点、线、圆等的测量和形…...

VR 动感单车身心调适系统的功能与作用

如今,人们面临着来自各方的压力,国家重视国民身心健康,但人们在实际生活中却缺乏有效的身心调节方式。无论是久坐的白领,还是学业繁重的学生,都存在身体亚健康和心理压力大的问题。传统健身方式枯燥、心理咨询成本高且…...

LabVIEW伸缩臂参数监控系统

LabVIEW开发伸缩臂越野叉车参数监控系统主要应用于工程机械中的越野叉车,以提高车辆的作业效率和故障诊断能力。系统通过PEAK CAN硬件接口和LabVIEW软件平台实现对叉车作业参数的实时监控和故障分析,具有良好的实用性和推广价值。 系统组成 系统主要由P…...

Spring提供了很好事务管理机制

事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制 分类 主要分为编程式事务和声明式事务两种。 编程式事务 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例: try {//TODO so…...

Selenium 和 Playwright两大框架的不同之处

自动化测试工具百花齐放,其中 Selenium 和 Playwright 是两大热门框架,谁才是你的最佳选择?面对企业项目的真实需求,它们的差异究竟在哪儿? Selenium 和 Playwright 是两种流行的自动化测试工具,它们都被用…...

【计算机视觉】轮廓检测

一、轮廓检测 在计算机视觉中,轮廓检测是另一个比较重要的任务,不单是用来检测图像或者视频帧中物体的轮廓,而且还有其他操作与轮廓检测相关。 以下代码展示了如何使用 OpenCV 进行 图像阈值处理、寻找图像轮廓 和 绘制轮廓 的完整流程&…...

【Linux】深入Linux:GCC/G++编译器实用指南

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器 在Linux系统中,理解和掌握GCC/G编译器是开发者不可或缺的技能之一。本文将深入探讨它们的工作原理和实际运用,帮助读者更好地利用这些强…...

【未来编程:AI如何通过合成复用原则优化设计】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言合成复用原则含义 继承复用含义UML图实现代码运行结果及分析优缺点 合成复用(我有这…...

【Rust自学】5.3. struct的方法(Method)

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.3.1. 什么是方法(Method) 方法和函数类似,也是用fn关键字进行声明,方法也有名称,也有参数&#xff…...

单片机 STM32入门

一、什么是单片机 单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(包括RAM和ROM)、输入/输出接口等集成在一个芯片上。单片机通常用于嵌入式系统,能够执行特定的…...

OneCode:开启高效编程新时代——企业定制出码手册

一、概述 OneCode 的 DSM(领域特定建模)出码模块是一个强大的工具,它支持多种建模方式,并具有强大的模型转换与集成能力,能够提升开发效率和代码质量,同时方便团队协作与知识传承,还具备方便的仿…...

学python还是学java?哪个相对来说比较容易上手?

在比较Python和Java哪个更容易上手时,可以从多个维度进行分析,包括语法简洁性、学习资源、应用领域、学习曲线等。 一、语法简洁性 Python:Python的语法简洁明了,更接近自然语言,易于理解和记忆。它使用缩进来表示代…...

C语言项目 天天酷跑(上篇)

前言 这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了…...

Windows 11 安装 Dify 完整指南 非docker环境

# Windows 11 安装 Dify 完整指南## 前置要求- Python 3.11 - Node.js 18 - PostgreSQL 14 - Redis for Windows - Git - Ollama (可选,用于本地模型)## 详细安装步骤### 1. 安装必要软件1. **Python 3.11**- 从 https://www.python.org/downloads/release/python-…...

MySQL变量

文章目录 MySQL变量系统变量查看系统变量设置系统变量 自定义变量用户变量局部变量 MySQL变量 MySQL变量分为系统变量和自定义变量 系统变量 系统变量有全局变量和会话变量 查看系统变量 #查看全局系统变量 show global variables; #根据条件查询全局系统变量 show global …...

Ubuntu离线安装Docker容器

前言 使用安装的工具snap安装在沙箱中,并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…...

ensp 关于acl的运用和讲解

ACL(Access Control List,访问控制列表)是一种常用于网络设备(如路由器、交换机)上的安全机制,用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口,基于不同的…...

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…...

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…...

什么是MVCC?

MVCC(多版本并发控制,Multi-Version Concurrency Control)是一种用于数据库管理系统中的并发控制的技术。它允许多个事务同时对同一数据进行读取和修改,而不会相互干扰,从而提高了数据库的并发性能。以下是对MVCC的详细…...

C/C++基础错题归纳

文章目录 第1天1.下面程序段的运行结果是:答案知识补充 2.当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少?答案知识补充 3.下面程序输出是什么?答案其他讲解 第1天 1.下面程序段的运行结果是: char C[5]{‘a’,’b’…...

Nginx 常用安全头

Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…...

消息队列(一)消息队列的工作流程

什么是消息队列 首先,代入一个场景,我现在做一个多系统的集成,分别有系统A、B、C、D四个系统,A系统因为使用产生了业务数据,B、C、D需要使用这些数据做相关的业务处理和运算,最基本的做法就是通过接口通信…...

LeetCode 2605 从两个数字数组里生成最小数字

探寻两个数组数位关联下的最小数字问题 题目描述 给定两个只包含 1 到 9 之间数字的数组 nums1 和 nums2,并且每个数组中的元素都是互不相同的。我们需要返回最小的数字,要求这个数字满足两个数组都至少包含这个数字的某个数位。例如,若 nu…...

AI新书推荐:深度学习和大模型原理与实践(清华社)

本书简介 在这个信息爆炸、技术革新日新月异的时代,深度学习作为人工智能领域的重要分支,正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书,旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…...

32单片机串口数据接收、空闲IDLE中断详解

一、前提说明 一开始写单片机程序的时候不太清楚空闲中断这个东西,每次用串口接收数据,都要再开一个定时器,在定时器内进行倒计时,每次接收数据就重置计时时间,计时结束就触发中断,再判断所有接收的数据&am…...

WebRtc webrtc-streamer部署

文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...

shiro注入filter内存马(绕过长度限制)

shiro环境 https://github.com/yyhuni/shiroMemshell(实验环境) 这里用的 Client_memshell.java package com.example.demo;import javassist.ClassPool; import javassist.CtClass; import org.apache.shiro.crypto.AesCipherService; import org.ap…...

Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传

参考:https://juejin.cn/post/6870837414852886542#heading-9 一般计算大文件的md5都是前端来做,因为如果后端来做,那得等到上传成功后才能计算md5值,并且读取的时间也很长。 为了解决文件大传输慢的问题,前端可以通…...

渗透Vulnhub-DC-9靶机

本篇文章旨在为网络安全渗透测试行业靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列DC-6靶机有定的了解 一、信息收集阶段 DC-9靶场信息: DC-9靶场介绍: https://www.vulnhub.com/entry/dc-9,412/ DC-9靶场下载: https://download.vu…...

springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic

摘 要 使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农…...

CentOS常见命令

CentOS(Community ENTerprise Operating System)基于Red Hat Enterprise Linux(RHEL)源代码开发,是常用的Linux发行版之一。在CentOS系统中,有许多命令用于管理和操作系统,以下是一些CentOS系统…...

oracle 设置归档日志存放路径

oracle 设置归档日志存放路径 1、创建新目录 mkdir /archive chown -R oracle:oinstall /archive 注:条件允许的话,/archive 目录应独立挂载。1、便于监控目录使用率;2、避免和其它文件混淆,便于管理。 2、设置归档日志存放路…...

机器学习1-简单神经网络

相比传统的机器学习算法,深度学习做出了哪些改进呢?其实两者在理论结构上是一致的,即:模型假设、评价函数和优化算法,其根本差别在于假设的复杂度 构建简单神经网络(未训练): # 封装…...

C++的侵入式链表

非侵入式链表 非侵入式链表是一种链表数据结构,其中每个元素(节点)并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的,链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示,即&a…...

MFC案例:图片文件转图标(ico)格式

本案例程序目的是将一般图像文件转换成图标格式(ico)。实现起来不是很复杂,这里为了介绍MFC的具体使用方法,在程序界面上分成几个功能块,包括:打开图像文件、选择ICON大小、转换、预览、保存等。相关具体步骤如下: 一、…...

【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理

文章目录 一、软件下载安装1、Unity官网2、下载Unity Hub 二、修改Unity Hub配置1、设置Unity Hub中文语言2、修改默认存储目录 三、安装unity编辑器1、点击安装编辑器2、版本选择3、关于版本号4、安装模块选择5、等待下载完成自动安装即可6、追加unity和模块 四、许可证管理专…...

东子生物完成A轮战略融资,数字商品交易全新升级为数商时代

2024年11月23日,东子生物数字时代正式上线,标志着公司全面迈入“数商时代”,作为国内领先的生物科技企业,东子生物在数字化浪潮中精准布局,以创新科技推动产业升级,以全新的思维引领健康产业,兼…...

数据结构经典算法总复习(上卷)

第一章&#xff1a;数据结构导论 无重要考点&#xff0c;仅需了解时间复杂度。 第二章&#xff1a;线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…...

电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?

电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误&#xff1a;原因与解决方案 在日常电脑使用中&#xff0c;我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件&#xff0c;如CorelDRAW&#xff08;简称CDR&#xff09;时&#xff0c;可能会遇到“计算…...

oracle使用imp命令导入dmp文件

需求&#xff1a; 增量导入 tbl_servicelegalclause 表数据&#xff08;dmp格式&#xff09;。 导入思路&#xff1a;使用 dba 创建一个 临时库&#xff0c;先将 tbl_servicelegalclause.dmp&#xff08;增量的数据&#xff09; 文件导入到 临时库&#xff0c;然后确认临时库数…...

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决

电脑蓝屏是让许多用户头疼的问题&#xff0c;其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法&#xff0c;能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏&#xff0c;如金手指氧化、芯片…...

Logback日志框架中的继承机制详解

在Logback框架中&#xff0c;logger的继承机制是基于层级结构&#xff08;hierarchical context&#xff09;工作的。每个logger都被分配一个名称&#xff0c;这个名称可以看作是一个路径或目录结构&#xff0c;从而形成了一个逻辑上的树状结构。这种结构使得日志记录具有很强的…...

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…...

node.js的异步工作之---回调函数与回调地狱

回调函数&#xff1a;在 Node.js 中&#xff0c;很多 API 都是异步的&#xff0c;通常通过回调函数来处理操作完成后的结果。这种回调模式虽然非常高效&#xff0c;但会导致代码逐渐变得难以维护&#xff0c;尤其是当有多个异步操作嵌套时&#xff08;即回调地狱&#xff09;。…...

tcp 的三次握手与四次挥手

问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...