mdb转gdb实现过程介绍(2)三种方式实现GDB数据库的读、写,并将实现方式与ArcGIS环境共存配置

news2024/10/6 18:34:58

一、内容提示


        通过解析mdb地理数据库,获取了图层之间的组织结构、空间参考、表字段属性等信息。

        下一步,就是将数据输出到GDB中。

        下面详细介绍python3.9版本,读写GDB数据的方法:

        (1)使用ArcPy创建GDB、读写GDB;

        (2)使用osgeo创建、读写GDB;

        (3)使用fiona、geopandas创建、读写GDB;

        (4)将osgeo或geopandas模块添加到自定义模块,实现其与ArcGIS环境的共存

图片

        MDB转出为GDB,涉及的内容比较多,尤其是需要开源实现。每一篇文章的内容篇幅都很长,希望对大家有帮助。

        (1)mdb(个人地理数据库)转shape file其实并不简单

        (2)mdb转gdb实现过程介绍(1)mdb地理数据库结构解析和gdb库的创建


 

二、FileGDB驱动

        GDB是Esri开发的一种地理数据库格式,它旨在存储和管理地理空间数据。GDB可以包含矢量数据、栅格数据、拓扑数据、地图符号化信息以及数据集之间的关联关系等。

        GDB作为Esri的一种地理数据库格式,并非完全开源,它提供了开放式的文件规范和API,在一定程度上允许与其他软件集成和交互。

        在以往(python<3.9),都是通过配置FileGDB驱动,实现对GDB数据的读写。

        在使用习惯上,一般有两种办法:

        (1)通过安装GDAL的方式添加FileGDB驱动

        一般是通过osgeo中的ogr实现GDB文件的读写,需要拷贝FileGDBAPI.dll至python安装目录下的“\Lib\site-packages\osgeo”;

        FileGDBAPI.dll下载地址:

            https://github.com/Esri/file-geodatabase-api

        GDAL的whl文件下载地址:

            https://github.com/cgohlke/geospatial-wheels/releases

        GDAL 3.x 版本,还需要把gdalplugins\disabled中的ogr_FileGDB.dll移动到gdalplugins目录;

GDAL 2.x版本,修改osgeo/__init__.py文件:注释15行,取消注释17行,如下:

# __init__ for osgeo package.# unofficial Windows binaries: set GDAL environment variables if necessaryimport ostry:    _here = os.path.dirname(__file__)    if _here not in os.environ['PATH']:        os.environ['PATH'] = _here + ';' + os.environ['PATH']    if 'GDAL_DATA' not in os.environ:        os.environ['GDAL_DATA'] = os.path.join(_here, 'data', 'gdal')    if 'PROJ_LIB' not in os.environ:        os.environ['PROJ_LIB'] = os.path.join(_here, 'data', 'proj')    if 'GDAL_DRIVER_PATH' not in os.environ:        #pass        # uncomment the next line to enable plugins        os.environ['GDAL_DRIVER_PATH'] = os.path.join(_here, 'gdalplugins')except Exception:    passdel os

        (2)使用'fiona'引擎实现,一般是通过geopandas完成GDB文件的读写

        为了方便介绍,假设利用conda新建一个geopandas的虚拟环境,复制FileGDBAPI.dll文件,粘贴到利用conda新建的虚拟环境根目录下的Library\bin里。然后将ogr_FileGDB.dll这个文件放置于前面FileGDBAPI.dll同级目录下的gdalplugins目录中即可。

三、OpenFileGDB驱动

        前文对python的版本进行了高亮,这个版本的分水岭是3.9,现在对这个版本分界的原因做一个简单的说明。

        在python3.9版本,用前文的方法配置FileGDB驱动已经行不通了,而小编也尝试了多种方法,并没有成功。有成功配置FileGDB驱动的小伙伴,望指导。

        于是,我将方向转为配置OpenFileGDB驱动。

        关于FileGDB驱动与OpenFileGDB驱动的详细介绍,可以通过GDAL社区文档获的相关信息。文档地址为:https://gdal.org/

        (1)FileGDB驱动

  • FileGDB驱动是用于ArcGIS File Geodatabase(FileGDB)格式的驱动程序,允许在GDAL/OGR库中读取和写入FileGDB数据。

  • 这个驱动是专门为ArcGIS FileGDB格式设计的,是Esri提供的官方支持。

        (2) OpenFileGDB驱动

  • OpenFileGDB驱动也是用于ArcGIS File Geodatabase(FileGDB)格式的驱动程序,但是它是GDAL/OGR库的一部分,提供了对FileGDB格式的开源支持。

  • OpenFileGDB驱动允许在GDAL/OGR库中使用FileGDB数据,无需依赖ArcGIS软件。

        在python3.9版本之前,安装的fiona包含了'OpenFileGDB'驱动,OpenFileGDB就是gdal中默认自带的针对gdb文件的驱动,但其对应的值为'r',说明它只能针对gdb文件进行读取。

图片

        ArcGIS Pro 3.1版本,使用的Python版本是3.9.16。克隆的python环境,在安装了fiona后,惊奇的发现,其对OpenFileGDB的支持,已经是“raw”。

图片

        但是,现实总是残酷的。要想通过fiona实现对gdb数据的写入,需要gdal的版本在3.6.0以上,而当前gdal的版本为3.4.0。报错信息如下:

图片

        因此,现在的目标转为升级gdal版本到3.6.0以上。这时候,需要考虑的因素为:

  • 若脚本需要封装为python工具箱,直接使用Pro的python环境或基于Pro克隆的python环境,是不让升级gdal版本的;(得另想办法)
  • 若脚本后续不会使用到arcgis或arcpy模块,则直接安装3.6.0及以上的gdal版本即可;

四、3种GDB的创建、读写方法

4.1  ArcPy 创建、读写GDB数据

        使用ArcPy可以轻松地创建、读取和写入Geodatabase(GDB)数据。下面分别介绍如何创建GDB数据和如何读取/写入GDB数据,并附上示意代码。

        (1)创建GDB数据

        要创建GDB数据,可以使用CreateFileGDB_management函数。

import arcpy# 设置工作空间arcpy.env.workspace = r"C:\path\to\your\workspace"# 定义GDB名称和保存路径gdb_name = "MyGDB.gdb"gdb_path = arcpy.env.workspace# 创建GDBarcpy.CreateFileGDB_management(gdb_path, gdb_name)

        (2)读取GDB数据

        要读取GDB数据,可以使用ListFeatureClasses和ListTables函数来列出GDB中的要素类和表。

import arcpy# 设置工作空间arcpy.env.workspace = r"C:\path\to\your\workspace\MyGDB.gdb"# 获取要素类列表feature_classes = arcpy.ListFeatureClasses()# 获取表列表tables = arcpy.ListTables()# 打印要素类和表名print("Feature Classes:")for fc in feature_classes:    print(fc)print("\nTables:")for table in tables:    print(table)

        (3)写入GDB数据

        要写入GDB数据,可以使用相应的InsertCursor来插入新的要素或记录到要素类或表中。

import arcpy# 设置工作空间arcpy.env.workspace = r"C:\path\to\your\workspace\MyGDB.gdb"# 要素类路径fc_path = "MyFeatureClass"# 字段列表fields = ["Field1", "Field2"]# 创建InsertCursorwith arcpy.da.InsertCursor(fc_path, fields) as cursor:    # 插入新要素    cursor.insertRow(("Value1", "Value2"))

4.2  osgeo 创建、读写GDB数据

     安装gdal,使用osgeo的ogr实现GDB的创建、读写。

    步骤:

  • 在python3.9版本中安装gdal3.8.4;
  •  使用org创建、读写GDB数据;

        (1)安装GDAL3.8.4

        为了便于后续osgeo及其依赖迁移到自定义模块中,使用conda新建一个虚机环境。

        01 在python3.9中安装gdal

#在conda默认envs目录下创建虚拟环境osgeo-write-gdb-testconda create -n osgeo-write-gdb-test python=3.9 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y#conda在指定目录下创建虚拟环境osgeo-write-gdb-testconda create --prefix C:\ProgramData\Miniconda3\envs\osgeo-write-gdb-test python=3.9.16

        下载GDAL-3.8.4-cp39-cp39-win_amd64.whl,我们知道,https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml网站已经打不开了,而GDAL在CSDN上下载,又需要会员或积分,需要GDAL的,可到https://github.com/cgohlke/geospatial-wheels/releases中下载。

        安装gdal:GDAL-3.8.4-cp39-cp39-win_amd64.whl

pip install GDAL-3.8.4-cp39-cp39-win_amd64.whl

图片

        (2) osgeo创建、读写gdb

        在解释器osgeo-write-gdb-test下,新建GDB和图层。

from osgeo import ogr, osr, gdal# 设置新的GDB文件路径gdb_file_path = './new_demo.gdb'# 创建数据驱动driver = ogr.GetDriverByName("OpenFileGDB")data_source = driver.CreateDataSource(gdb_file_path)if data_source is not None:    print("Successfully created GDB:", gdb_file_path)else:    print("Failed to create GDB:", gdb_file_path)# 获取并打印 GDAL 的版本信息print("GDAL Version:", gdal.__version__)# 创建数据驱动driver = ogr.GetDriverByName("OpenFileGDB")data_source = driver.Open(gdb_file_path, 1)  # 1 表示以写入模式打开数据源,如果数据源不存在则创建新的# 创建坐标系和图层if data_source is not None:    srs = osr.SpatialReference()    srs.ImportFromEPSG(4490)  # 你所需的 EPSG 编码    outLayer = data_source.CreateLayer("ds", srs=srs, geom_type=ogr.wkbPolygon)  # 创建图层    if outLayer is None:        print("Layer creation failed!")else:    print("OpenFileGDB driver is not available.")

        上述代码,在当前目录创建一个名为“new_demo”的gdb,并在该gdb中新建一个图层“ds”,执行结果如下:

图片

4.3  fiona、geopandas 创建、读写GDB数据

        安装geopandas,分别使用geopandas和fiona实现GDB的创建、读写。

        步骤:

  • 在python3.9版本中安装geopandas;
  • 创建、读写GDB数据;

        (1) 安装geopandas

        为了便于后续geopandas及其依赖迁移到自定义模块中,使用conda新建一个虚机环境。

        01 在python3.9中安装geopandas

#在conda默认envs目录下创建虚拟环境geopandas-write-gdb-testconda create -n geopandas-write-gdb-test python=3.9 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y#conda在指定目录下创建虚拟环境geopandas-write-gdb-testconda create --prefix C:\ProgramData\Miniconda3\envs\geopandas-write-gdb-test python=3.9.16#安装geopandasconda install geopandas -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge -y

        (2) 创建、读写GDB数据

        01 使用geopandas创建、读写gdb

        在解释器geopandas-write-gdb-test下,新建GDB和图层。

import geopandas as gpdfrom shapely.geometry import Point, LineString, Polygondemo_point_layer = gpd.GeoDataFrame(    {        '数据字段测试': ['点要素测试数据字段测试'],        'geometry': [Point(0, 0)]    },    crs='EPSG:4326')demo_linestring_layer = gpd.GeoDataFrame(    {        '数据字段测试': ['线要素测试数据字段测试'],        'geometry': [LineString([(0, 0), (1, 1)])]    },    crs='EPSG:4326')demo_polygon_layer = gpd.GeoDataFrame(    {        '数据字段测试': ['面要素测试数据字段测试'],        'geometry': [Polygon([(0, 0), (1, 1), (1, 0)])]    },    crs='EPSG:4326')# 写出到示例gdb文件中demo_point_layer.to_file('./demo1.gdb', layer='点图层测试', driver='OpenFileGDB')demo_linestring_layer.to_file('./demo1.gdb', layer='线图层测试', driver='OpenFileGDB')demo_polygon_layer.to_file('./demo1.gdb', layer='面图层测试', driver='OpenFileGDB')

        上述代码,在当前目录创建一个名为“demo1”的gdb,并在该gdb中新建一个图层三个图层,执行结果如下:

图片

        02 使用fiona创建、读写gdb

import fiona# 创建示例数据demo_polygon = {    'type': 'Polygon',    'coordinates': [[(0, 0), (1, 1), (1, 0), (0, 0)]]}# 设置文件路径gdb_file = './demo2.gdb'# 将投影数据文件添加到环境变量中# import os# os.environ["PROJ_LIB"] = "C:/proj"# 创建GDB文件和图层with fiona.open(gdb_file, 'w', driver='OpenFileGDB', crs='EPSG:4326', layer='polygon_layer', schema={'geometry': 'Polygon', 'properties': {}}) as layer:    layer.write({'geometry': demo_polygon, 'properties': {}})# 读取GDB数据with fiona.open(gdb_file, 'r', driver='OpenFileGDB') as layer:    for feature in layer:        print(feature)

        执行上述代码,会报错“fiona.errors.CRSError: The WKT could not be parsed. PROJ: proj_create_from_database: Cannot find proj.db”,如下所示:

图片

        这个错误是fiona缺失投影数据的定义文件(通常是 proj 文件)引起的。可通过将proj文件夹添加到环境变量中解决。

        注意:

  • 通过直接安装geopandas,不能获得proj 文件。需要安装GDAL后,在‘\Lib\site-packages\osgeo\data\proj’处获得,可在代码执行中自动将其添加到环境变量中解决;
  • os.environ["PROJ_LIB"] 添加的proj路径,不能包含中文;
import osos.environ["PROJ_LIB"] = "C:/proj"

图片

        生成的gdb如下:

图片

 

五、osgeo、fiona、geopandas 开源读、写gdb,如何与Arcpy环境共存?

        前面我们通过开源的方式实现了对GDB的创建和读写,但是都是在原生安装GDAL和Geopandas的虚机环境中。

        如果我们需要调用arcpy或arcgis模块,或后期将脚本封装为工具,就需要将实现gdb读、写实现的模块放到自定义模块中,并实现其与ArcGIS环境的共存。

        步骤:

        (1)创建自定义模块,将开源读写gdb的模块置于其中;

        (2)使用ogr创建gdb,并使用arcpy获取图层列表;

        (3)使用fiona创建gdb,并使用arcpy获取图层列表;

        (4)使用geopandas创建gdb,并使用arcpy获取图层列表。

5.1  将开源实现读、写gdb,组织到自定义模块中

        这部分非常重要。我们知道,ArcGIS Pro的python环境是不允许我们添加包的,而我们为了添加包,就需要克隆python环境,再在克隆环境中添加包。但是我们会碰到非常尴尬的两个问题:

        (1)安装的包可能与克隆环境内的包版本冲突,导致无法正常安装或后续莫名其妙的错误;

        (2)当我们基于Pro自定义python工具箱后,那些我们定义的工具,可能在克隆环境中添加了第三方包,这在部署和推广使用时,带来了很大的不便。

        01 将gdal添加到自定义模块

        我们在通过conda创建的虚拟环境osgeo-write-gdb-test中,安装GDAL-3.8.4-cp39-cp39-win_amd64.whl,在site-packages文件夹下,能看到我们已经安装的包或模块。如下图:

图片

        我们将上图中绿框中的三个文件夹,拷贝至我们自定义的文件夹“myosgeo”中,并在myosgeo文件夹下创建__init__.py。如下图:

图片

在__init__.py文件夹中添加如下代码:​​​​​​


import os
import sys

# 获取当前模块所在目录的路径
module_dir = os.path.dirname(__file__)

# 将当前模块所在目录添加到sys.path中
sys.path.insert(0, module_dir)
 

        02 将geopandas添加到自定义模块

import osimport sys
# 获取当前模块所在目录的路径module_dir = os.path.dirname(__file__)
# 将当前模块所在目录添加到sys.path中sys.path.insert(0, module_dir)

        03 将geopandas添加到自定义模块

        我们在通过conda创建的虚拟环境geopandas-write-gdb-test中,site-packages文件夹下,将geopandas及其依赖的模块拷贝到“myenv"文件夹中,并添加__init__.py,__init__.py内的内容相同。

        拷贝的内容如下:

图片

 

5.2  使用自定义模块中的ogr创建gdb,使用arcpy读取gdb

        测试示例代码如下:

from mygeos.osgeo import ogr, osr, gdalimport arcpy# 设置新的GDB文件路径gdb_file_path = './new_demo_arcpy.gdb'# 创建数据驱动driver = ogr.GetDriverByName("OpenFileGDB")data_source = driver.CreateDataSource(gdb_file_path)if data_source is not None:    print("Successfully created GDB:", gdb_file_path)else:    print("Failed to create GDB:", gdb_file_path)# 获取并打印 GDAL 的版本信息print("GDAL Version:", gdal.__version__)# 创建数据驱动driver = ogr.GetDriverByName("OpenFileGDB")data_source = driver.Open(gdb_file_path, 1)  # 1 表示以写入模式打开数据源,如果数据源不存在则创建新的# 创建坐标系和图层if data_source is not None:    srs = osr.SpatialReference()    srs.ImportFromEPSG(4490)  # 你所需的 EPSG 编码    outLayer = data_source.CreateLayer("使用自定义ogr创建的测试图层", srs=srs, geom_type=ogr.wkbPolygon)  # 创建图层    if outLayer is None:        print("Layer creation failed!")else:    print("OpenFileGDB driver is not available.")data_source = Nonearcpy.env.workspace = gdb_file_pathprint(arcpy.ListFeatureClasses())

        输出如下:

图片

5.3  使用自定义模块中的geopandas创建gdb,使用arcpy读取gdb

        测试示例代码如下:

# -*-coding:utf-8-*-import arcpyfrom myenv import geopandas as gpdfrom myenv.shapely.geometry import Point, LineString, Polygondemo_point_layer = gpd.GeoDataFrame(    {        '数据字段测试': ['点要素测试数据字段测试'],        'geometry': [Point(0, 0)]    },    crs='EPSG:4326')demo_linestring_layer = gpd.GeoDataFrame(    {        '数据字段测试': ['线要素测试数据字段测试'],        'geometry': [LineString([(0, 0), (1, 1)])]    },    crs='EPSG:4326')demo_polygon_layer = gpd.GeoDataFrame(    {        '数据字段测试': ['面要素测试数据字段测试'],        'geometry': [Polygon([(0, 0), (1, 1), (1, 0)])]    },    crs='EPSG:4326')# 写出到示例gdb文件中demo_point_layer.to_file('./demo_geopandas.gdb', layer='gdf点图层自定义模块测试', driver='OpenFileGDB')demo_linestring_layer.to_file('./demo_geopandas.gdb', layer='gdf线图层自定义模块测试', driver='OpenFileGDB')demo_polygon_layer.to_file('./demo_geopandas.gdb', layer='gdf面图层自定义模块测试', driver='OpenFileGDB')data_source = Nonearcpy.env.workspace = './demo_geopandas.gdb'print(arcpy.ListFeatureClasses())

        输出如下:

图片

5.4  使用自定义模块中的fiona创建gdb,使用arcpy读取gdb

        测试示例代码如下:

from myenv import fionaimport arcpy# 创建示例数据demo_polygon = {    'type': 'Polygon',    'coordinates': [[(0, 0), (1, 1), (1, 0), (0, 0)]]}# 设置文件路径gdb_file = './demo_fiona.gdb'import osos.environ["PROJ_LIB"] = "C:/proj"# 创建GDB文件和图层with fiona.open(gdb_file, 'w', driver='OpenFileGDB', crs='EPSG:4326', layer='fiona开源自定义模块测试', schema={'geometry': 'Polygon', 'properties': {}}) as layer:    layer.write({'geometry': demo_polygon, 'properties': {}})# 读取GDB数据with fiona.open(gdb_file, 'r', driver='OpenFileGDB') as layer:    for feature in layer:        print(feature)data_source = Nonearcpy.env.workspace = './demo_fiona.gdb'print(arcpy.ListFeatureClasses())

        输出如下:

图片

图片

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

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

相关文章

加权 KNN 算法的原理与详解

加权kNN&#xff0c;k近邻算法的增强改进版本。 加权KNN算法 近邻算法&#xff08;k-Nearest Neighbors, kNN&#xff09;是一种用于分类和回归的非参数方法。它的基本思想是“看邻居”&#xff0c;即通过查找离目标点最近的 K 个数据点&#xff0c;来判断目标点的类别或数值。…

5分钟教你用AI把老照片动起来,别再去花49块9的冤枉钱了

文章目录 需要的工具 最近&#xff0c;AI视频在各大平台上&#xff0c;又火了。 只是火的形式&#xff0c;变成了将老照片动起来&#xff0c;打情感牌&#xff0c;或者做很多经典电视剧的再整活。 直接把可灵的生成时间&#xff0c;从以前的4分钟&#xff0c;生生的干成了20分钟…

AI绘画Stable Diffusion 超高分辨率扩图教程:ControlNet组件-Tile妙用,增强细节保持构图完整!

大家好&#xff0c;我是向阳 今天给大家分享如何用AI绘画工具Stable Diffusion 的 ControlNet Tile工具应用。ControlNet Tile模型能够在SD绘图过程中&#xff0c;实现高分辨率下实现高清扩图&#xff0c;并且避免出现图像分身现象&#xff0c;以及可以调整SD扩散生产过程噪声…

代码随想录算法训练营第67天:图论5[1]

代码随想录算法训练营第67天&#xff1a;图论5 ‍ 105.有向图的完全可达性 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 【题目描述】 给定一个有向图&#xff0c;包含 N 个节点&#xff0c;节点编号分别为 1&#xff0c;2&#xff0c;…&#xff0…

WPS中制作甘特图的详细教程

网上没几个详细说怎么在WPS中制作甘特图的&#xff0c;我自己整理了一下详细教程&#xff0c;最终效果如下图所示&#xff1a; 1.写好需要展示的项目相关信息&#xff0c;如下图所示&#xff1a; #####这个进度的百分比渐变效果这样设置就行了 2.现在我们需要计算已用时间和剩…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——4.预后相关外泌体基因确定临床数据合并(1)

内容如下&#xff1a; 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

Java知识点大纲

文章目录 第一阶段&#xff1a;JavaSE1、面向对象编程(基础)1)面向过程和面向对象区别2)类和对象的概述3)类的属性和方法4)创建对象内存分析5)构造方法(Construtor)及其重载6)对象类型的参数传递7)this关键字详解8)static关键字详解9)局部代码块、构造代码块和静态代码块10)pac…

前端重点之:Vue+websocket通信详细用法和websocket心跳机制的使用,websocket断开实时监测,websocket实时通信

今年年初找工作,好多gou面试官总喜欢问关于websocket通信的使用方式,此次又用到了,在此做个总结:主要包含websocket的具体使用方法,和重点:(心跳机制的使用),就是主要是前端实时监测websocket是否有断连和数据的处理 在前端开发中,WebSocket 是一种常见的技术,用于…

AI网络爬虫006:从当当网批量获取图书信息

文章目录 一、目标二、输入内容三、输出内容一、目标 用户输入一个图书名称,然后程序自动从当当网批量获取图书信息 查看相关元素在源代码中的位置: 二、输入内容 第一步:在deepseek中输入提示词: 你是一个Python爬虫专家,一步步的思考,完成以下网页爬取的Python脚本任…

ImportError cannot import name ‘uic‘ from ‘PyQt5‘

ImportError cannot import name ‘uic’ from ‘PyQt5’ 1、描述 使用nuitka把PyQt5打包exe文件时报错: ImportError cannot import name ‘uic’ from ‘PyQt5’ 2、原因 这个是由于无法找到uic的目录导致的,在PyQt5的目录下是有uic文件的。 3、解决方案 找到导入uic…

ASM准入小助手卸载没有密码的方法:读取明文密码2024年7月有效

本文目录 前言一、工具链接1、x64dbg 二、具体过程 前言 在一次工作过程中&#xff0c;电脑中意外的安装了一个ASM准入小助手软件&#xff0c;工作结束以后回来发现没有卸载&#xff0c;然后就决定把它卸载掉&#xff0c;但是居然给了我一个大大的提示框&#xff1a; 由于联系…

HTTP协议深入

1.了解web和网络基础 有客户端和服务端双方参与交互 客户端发送请求:request 服务端根据请求给出响应:response 请求通过URL来指定要获取都得资源 响应内容可以是HTML网页&#xff0c;或者用json表示的数据或者其他二进制文件内容 Web使用一种名为HTTP的协议作为规范&…

sideloadly 苹果自签和sidestore手机续签ipa记录

sideloadly 地址&#xff1a;https://sideloadly.io/#download 直接安装对应系统软件&#xff0c;然后吧ipa 拖到里面续签&#xff0c;缺点每7天需要电脑续签 如果续签保留数据需要对应的位置开启 enable file sharing 勾选 和 bundle id 修改 注意的地方需要电脑和手机appi…

DPDK概述

文章目录 1. DPDK概述1.1 DPDK 内存管理Mbuf单帧结构:1.2 DPDK内核驱动 igb_uio驱动1.3 DPDK源码下载方式1.4 pktgen源码下载方式1.5 DPDK相关名词解释 1. DPDK概述 Intel DPDK全称Intel Data Plane Development Kit&#xff0c;是Intel提供的数据平面开发工具集&#xff0c;为…

万界星空科技QMS系统:重塑质量管理新纪元

万界星空科技QMS&#xff08;Quality Management System&#xff09;质量管理系统是一套全面、高效的质量管理工具&#xff0c;旨在帮助企业提升产品质量、优化生产流程、降低质量成本。该系统具备多个具体功能模块&#xff0c;以下是对其主要功能模块的详细介绍&#xff1a; 一…

STM32远程烧录程序

目录 简介 不同的程序下载方式 ICP&#xff1a;In-Circuit Programming ISP&#xff1a;In-System Programing IAP&#xff1a;In-Application Programming BootLoader Bootloader 是什么&#xff1f; STM32的启动方式 存储器组织 存储器映像 嵌入式SRAM 嵌入式FL…

LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

一、LVS-DR集群介绍1.1 LVS-DR 工作原理1.2 数据包流向分析1.3 LVS-DR 模式的特点1.4 LVS-DR中的ARP问题1.4.1 问题一1.4.2 问题二二、构建LVS-DR集群2.1 构建LVS-DR集群的步骤&#xff08;理论&#xff09;1.配置负载调度器&#xff08;192.168.80.30&#xff09;&#xff08;…

UnityUGUI流动效果轻松实现:告别复杂Shader,一招搞定动态背景

引言 在Unity开发过程中&#xff0c;我们常常会遇到这样一个需求&#xff1a;将一张简单的图片通过平铺效果进行展示&#xff0c;以此来减少图片的大小。这个操作非常简单&#xff0c;只需将Image的Type设置为Tiled&#xff0c;然后调整RectTransform的尺寸即可。但有时候&…

Git 操作补充:cherry-pick、变基

1. 挑选提交合并 git cherry-pick 对于多分支的代码库&#xff0c;将代码从一个分支转移到另一个分支是一种常见的需求&#xff0c;这可以分成两种情况&#xff1a;一种情况是&#xff0c;你需要另一个分支的所有代码变动&#xff0c;那么就采用 git merge&#xff1b;另一种情…

mybatis mapper.xml 比较运算符(大于|小于|等于)的写法: 转义和<![CDATA[]]>

文章目录 引言I 使用xml 原生转义的方式进行转义II 使用 <![CDATA[ 内容 ]]>引言 应用场景:查询时间范围 背景:在 *.xml 中使用常规的 < > = <= >= 会与xml的语法存在冲突 <![CDATA[]]> 比 转义符 来的繁琐 <![CDATA[]]> 表示xml解析器忽略…