
GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载gdal vector create是 GDAL 3.13 版本新增的gdal vector子命令族中的一项核心能力用于创建一个或多个矢量图层目标数据集不存在时自动创建存在且底层格式支持时则向其中追加新图层。本指南将以 官方文档 为主线结合仓库中的 核心实现、算法注册 与 自动化测试系统讲解其语法、全部程序专属选项、三种图层/字段定义方式显式指定、--like模板、OGR_SCHEMA、标准选项的语义以及它与gdal vector export-schema、pipeline 的联动用法。读完本文你将能够熟练使用该命令快速搭建矢量数据容器、以既有数据集为模板复制图层结构、并用 JSON Schema 精确控制字段类型与坐标参考系。一、命令概述与适用场景:program:gdal vector create的核心任务是创建矢量图层其行为可概括为两条路径新建数据集当目标文件如points.gpkg不存在时命令自动创建数据集并写入指定图层追加图层当目标数据集已存在、且底层驱动支持多图层时配合--update打开更新模式即可向其中追加新图层。命令支持三种互斥的“图层结构定义”来源详见下文第三节通过--field、--geometry-type、--geometry-field、--crs、--fid逐一显式指定通过--like引用一个既有矢量数据集作为模板通过--schema传入符合 OGR_SCHEMA 规范的 JSON 文件或字符串。此外:program:gdal vector create可以作为 pipelinegdal vector pipeline的第一步由源码中CanBeFirstStep()、CanBeMiddleStep()、CanBeLastStep()均返回true见 gdalalg_vector_create.h可以确认这意味着它既能独立使用也能嵌入矢量处理流水线。从 算法注册处 可以看到GDALVectorCreateAlgorithmStandalone被注册为gdal vector的create子命令其NAME create、DESCRIPTION Create a vector dataset.见 头文件。在 Python 绑定中可通过gdal.GetGlobalAlgorithmRegistry()[vector][create]获取该算法对象或使用上下文管理器gdal.alg.vector.create(...)参见 测试脚本。二、Synopsis命令语法命令的标准调用形式如下gdal vector create [--update] [--overwrite | --overwrite-layer] [--output-layer OUTPUT-LAYER] [--like TEMPLATE-DATASET [--input-layer INPUT-LAYER]] [--schema OGR_SCHEMA] | [--field NAME:TYPE[...] --geometry-type GEOMETRY-TYPE --geometry-field NAME --crs CRS [--fid FID]] [--co NAMEVALUE]... [--lco NAMEVALUE]... [--oo NAMEVALUE]... [--output-oo NAMEVALUE]... [--quiet] OUTPUT-DATASET其中OUTPUT-DATASET为位置参数指定目标数据集路径输出驱动可通过-f/--format指定未指定时由 GDAL 依据目标文件名自动推断源码中调用GDALGetOutputDriversForDatasetName()完成单驱动匹配见 gdalalg_vector_create.cpp。若在 pipeline 中作为中间步骤使用则输出格式固定为MEM内存数据集同一文件 L236-L239。三、程序专属选项详解3.1 图层名称与来源选项参数说明--output-layerOUTPUT-LAYER输出图层名。仅在创建单图层数据集时有意义用于定义或覆盖所创建图层的名称当模板/Schema 含多个图层时不允许指定源码在 gdalalg_vector_create.cpp L294-L304 会报错Output layer name should not be specified when there are multiple layers in the schema.-i, --like, --inputTEMPLATE-DATASET用作模板的既有矢量数据集与--schema、--field、--geometry-type、--geometry-field、--crs互斥。若模板含多图层且目标格式不支持多图层必须配合--input-layer指定单一图层--layer, --input-layerINPUT-LAYER从模板或 Schema 中选取的图层名可重复指定多个仅在使用--like/--schema且源含多图层时有意义--schemaOGR_SCHEMAOGR_SCHEMA 的文件路径、URL 或 JSON 字符串需符合 ogr/data/ogr_fields_override.schema.json 所定义的规范与--like及字段类选项互斥当未指定--output-layer时输出图层名默认取目标数据集文件名的基名CPLGetBasenameSafe()见 gdalalg_vector_create.cpp L127-L129。3.2 显式定义图层结构选项参数说明--crsCRS创建图层的坐标系。支持OGRSpatialReference::SetFromUserInput所能解析的一切形式EPSG 投影/地理/复合坐标系如EPSG:4296、WKT 文本、PROJ.4 声明或包含 WKT 定义的.prj文件路径--geometry-fieldGEOMETRY-FIELD几何字段名若输出格式支持默认geom--geometry-typeGEOMETRY-TYPE图层几何类型见下方列表可追加Z、M、ZM后缀表示维度--fieldNAME:TYPE[(,WIDTH[,PRECISION])]定义图层字段可重复使用以创建多字段--fidFIDFID 列名仅对声明了FID图层创建选项的驱动生效如 GPKG几何类型合法取值GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION、CURVE、CIRCULARSTRING、COMPOUNDCURVE、SURFACE、CURVEPOLYGON、MULTICURVE、MULTISURFACE、POLYHEDRALSURFACE、TIN。以上值均可追加Z、M或ZM后缀以指明维度如POINTZ、MULTIPOLYGONZM。字段类型合法取值INTEGER、INTEGER64、REAL、STRING、DATE、TIME、DATETIME、BINARY、INTEGERLIST、REALLIST、STRINGLIST、INTEGER64LIST。其中宽度与精度仅对INTEGER、INTEGER64、REAL、STRING有意义例如--field population:INTEGER(10,5)、--field name:STRING(255)。字段字符串的底层解析--field参数的实际解析逻辑位于 gdalalgorithm.cpp 的GDALAlgorithm::ParseFieldDefinition()它使用正则表达式^([^:]):([^(\s])(?:\((\d)(?:,(\d))?\))?$将NAME:TYPE[(WIDTH[,PRECISION])]拆分为名称、类型、宽度与精度并通过OGRFieldDefn::GetFieldTypeByName()映射为 OGR 字段类型同时AddFieldDefinitionArg()还会校验字段名唯一性重复字段名会报Duplicate field name: xxx并支持--field重复传入构建多字段见 gdalalgorithm.cpp L5454-L5501。测试用例对非法格式的校验覆盖也印证了这一逻辑例如--field invalid_field_definition会报Invalid field definition format. Expected NAME:TYPE[(WIDTH[,PRECISION])]、--field wrong_field:Stroooong:会报Unsupported field type: Stroooong见 test_gdalalg_vector_create.py。3.3 选项互斥规则--like/--schema与--field、--geometry-type、--geometry-field、--crs、--fid之间互斥原因在于后者属于“显式指定”而前两者属于“结构继承”语义冲突。这一约束在源码中有双重保障参数声明层面--input、--schema、--field被归入同一互斥组inputMutexGroup like-schema-field见 gdalalg_vector_create.cpp L76-L98运行时校验层面AddValidationAction()在检测到--schema或--like与上述显式选项同时给出时报错When --schema or --like is specified, --geometry-field, --geometry-type, --field, --crs and --fid options must not be specified.gdalalg_vector_create.cpp L100-L116。对应互斥场景的完整测试矩阵可见 test_gdalalg_vector_create.py 的 test_gdalalg_vector_create_mutex_options。四、标准选项Standard Options本命令继承gdal vector家族通用的标准选项其中与“创建”语义最相关的一组如下对应定义见 doc/source/programs/gdal_options选项说明--update以更新模式打开已存在的输出数据集允许向其中追加新图层update.rst--overwrite允许覆盖已存在的目标文件/数据集默认若目标已存在则报错overwrite.rst--overwrite-layer允许覆盖已存在的输出矢量图层overwrite_layer.rst--oo, --open-option数据集打开选项格式相关可重复oo.rst--output-oo, --output-open-option输出数据集打开选项格式相关3.12 起可重复output_oo.rst--co, --creation-option数据集创建选项格式相关可重复如 GeoPackage 的版本控制选项co_vector.rst--lco, --layer-creation-option图层创建选项格式相关可重复如 FID 或几何列名控制lco.rst--output-layer指定输出图层名output_layer.rst--append是否允许向已有图层追加要素同时也会在输出数据集不存在时创建它append_vector.rst-q, --quiet抑制进度条与部分警告信息quiet.rst命令成功时返回状态码0失败时返回非零值并输出错误信息参照 return_code.rst。4.1 同名图层与覆盖的运行时语义从 CreateLayer() 实现 可梳理出覆盖相关的完整行为链若目标图层已存在且未指定--overwrite-layer报错Layer xxx already exists. Specify the --overwrite-layer option to overwrite it.若指定--overwrite-layer但图层不存在报错Cannot find layer xxx.若指定--overwrite-layer且图层存在先DeleteLayer()删除原图层再创建同名新图层目标数据集已存在但未指定--update在 RunStep() 入口 即报错Dataset xxx already exists. Specify the --update option to open it in update mode.。测试用例 test_gdalalg_vector_create_overwrite_update_overwrite_layer 完整覆盖了“新建→重复创建报错→overwrite 覆盖→update 追加新图层→overwrite-layer 替换指定图层→overwrite-layer 找不到图层报错”等场景并验证了--overwrite对 Shapefile 同样生效test_gdalalg_vector_create_overwrite_shapefile。五、OGR_SCHEMA结构化定义图层蓝图OGR_SCHEMA 是一个 JSON 对象用于描述矢量数据集的结构其规范定义于仓库 ogr/data/ogr_fields_override.schema.json。--schema选项接受三类输入文件名、URL、或符合该规范的 JSON 字符串。在源码中输入统一经由OGRSchemaOverride::LoadFromJSON()解析gdalalg_vector_create.cpp L149-L215并允许包含多个图层layers数组与几何字段geometryFields数组。OGR_SCHEMA 顶层结构要点源自 schema 定义文件dataset根对象必须包含layers数组layername必填可用*通配、fidColumnName、schemaTypePatch或Full、fields字段定义数组必填、geometryFields几何字段数组fieldname、typeInteger/Integer64/Real/String/Binary/IntegerList/Integer64List/RealList/StringList/Date/Time/DateTime、subTypeNone/Boolean/Int16/Float32/JSON/UUID、width、precision、newName、nullable、uniqueConstraint、defaultValue、alias、comment、domainName、timezone日期/时间字段的时区geometryFieldname必填、type必填支持Point、LineString、Polygon、各Multi*、GeometryCollection、曲线族、Tin、PolyhedralSurface、Triangle等并允许Z/M后缀、coordinateSystem可含authid如EPSG:32632或wkt、supportedSRSList、坐标分辨率等coordinateSystem支持authidauthority:code形式如EPSG:4326、wkt、projjson、dataAxisToSRSAxisMapping、coordinateEpoch。测试中给出的最小可用 Schema 示例test_gdalalg_vector_create.py L288-L310{ layers: [ { name: layer1, schemaType: Full, fields: [ {name: field1, type: String, subType: JSON} ], geometryFields: [ { name: geom, type: Point, coordinateSystem: {wkt: PROJCS[\WGS 84 / Pseudo-Mercator\,...AUTHORITY[\EPSG\,\3857\]]} } ] } ] }该测试验证了subType: JSON会正确映射到OGRFieldSubType::OFSTJSON以及 Schema 中内嵌的 WKT 坐标系最终以EPSG:3857写入输出图层。更简洁的坐标写法coordinateSystem: {authid: EPSG:32632}也在 test_gdal_vector_create_compact_crs 中得到验证。Schema 中DateTime字段的时区信息如11:30会被保留并在导出时原样回读见 test_gdalalg_vector_create_datetime_timezone_round_trip。多图层与目标格式的约束当 Schema 包含多个图层而目标驱动不支持多图层未声明GDAL_DCAP_MULTIPLE_VECTOR_LAYERS且未通过--input-layer指定单层时命令报错The output format xxx doesnt support multiple layers.gdalalg_vector_create.cpp L283-L292。测试 test_gdalalg_vector_create_single_layer_format 用双图层 Schema 写 Shapefile 验证了该错误分支并确认加上--input-layer layer2后即可成功。六、官方示例逐步演示以下三个示例均来自 官方文档可直接复制运行。示例 1在新建数据集中创建 POINT 图层gdal vector create --geometry-type point --crs EPSG:4326 --field name:string --output-layer names points.gpkg效果创建points.gpkgGeoPackage 数据集内含名为names的 POINT 图层字段name为 STRING 类型坐标系为EPSG:4326。注意--geometry-type与--field的类型名大小写不敏感。示例 2向已有数据集追加图层gdal vector create --update --geometry-type point --crs EPSG:4326 --field name:string --output-layer names2 points.gpkg效果以更新模式打开已存在的points.gpkg追加 POINT 图层names2。若不指定--update命令将因数据集已存在而报错。示例 3以既有数据集的图层为模板创建新数据集gdal vector create --like ../data/poly.gpkg --input-layer poly --output-layer areas_new areas.gpkg效果以../data/poly.gpkg中的poly图层为模板复制其字段、几何类型与坐标系定义在areas.gpkg中创建新图层areas_new。更多实战变体源自测试用例创建不带空间参考、仅含 STRING 字段的非空间图层aspatial layertest_gdalalg_vector_create_aspatial_layergdal vector create --field test_field:String --output-layer test_layer test_aspatial.gpkg通过--like复制多图层数据集中的全部图层或指定部分图层与重命名test_gdalalg_vector_create_layer_names# 复制 in.gpkg 中全部 3 个图层 gdal vector create --like in.gpkg out.gpkg # 仅复制 layer_1 并重命名为 layer_new_1 gdal vector create --like in.gpkg --input-layer layer_1 --output-layer layer_new_1 out.gpkg为 FID 指定自定义列名GPKG 驱动支持test_gdalalg_vector_create_explicit_fidgdal vector create --fid my_fid out.gpkg七、与gdal vector export-schema的配套使用OGR_SCHEMA 最实用的来源之一是 gdal vector export-schema同为 3.13 新增它从任意矢量数据集导出 OGR_SCHEMACLI 下输出到标准输出API 下写入output参数。典型的“模板复制”工作流# 步骤 1导出既有数据集的 Schema gdal vector export-schema poly.gpkg poly_schema.json # 步骤 2用导出的 Schema 创建新数据集 gdal vector create --schema poly_schema.json --output-layer countries_new countries.gpkg与--like相比--schema的优势在于 Schema 是可移植的文本产物可以被修改、版本化、校验和跨机器复用。官方文档还提示在 Windows PowerShell 5.1 下用或Out-File -Encoding utf8重定向会产出带 BOM 的 UTF-8可能导致gdal vector create报ERROR 1: JSON parsing error: unexpected character (at offset 0)建议改用--output选项直接写文件见 export-schema 文档 L81-L102。此外还可以用check-jsonschema等工具依据 ogr_fields_override.schema.json 对 Schema 文件做离线校验后再交给--schema。八、在 pipeline 中作为首步使用作为 pipeline 的第一步:program:gdal vector create可以先建立空的矢量容器再交给后续步骤填充数据。其内部实现细节值得注意当作为独立命令standalone运行时会先依据输出文件名推断驱动并调用poDstDriver-Create()创建数据集而作为 pipeline 步骤时输出格式固定为MEM见 gdalalg_vector_create.cpp L217-L239。与gdal vector pipeline组合的示意gdal vector pipeline \ ! create --geometry-type polygon --crs EPSG:4326 --field name:string --output-layer zones out.gpkg \ ! read zones_source.gpkg --layer zones \ ! write --output-layer zones out.gpkg九、驱动支持与限制多图层支持--like/--schema复制多图层时要求目标驱动声明GDAL_DCAP_MULTIPLE_VECTOR_LAYERS否则必须用--input-layer明确选择单一图层。几何字段名--geometry-field仅在输出驱动支持命名几何字段时生效默认值geom源码中m_geometryFieldName{geom}见 gdalalg_vector_create.h L73。FID 列--fid仅对声明了FID图层创建选项的驱动生效源码会在图层创建选项中已显式给出FID时不再覆盖见 gdalalg_vector_create.cpp L494-L503。测试 test_gdalalg_vector_create_implicit_fid_from_source 还验证了当模板源图层使用自定义 FIDFIDmy_fid时创建出的图层会继承该 FID 列名。多几何字段当前版本不支持在一个图层中创建多个几何字段源码在CreateLayer()中明确报错Multiple geometry fields are not supported.gdalalg_vector_create.cpp L480-L489注释说明该限制未来可能解除。CRS 解析失败--crs传值无法被OGRSpatialReference::SetFromUserInput()解析时命令报Cannot parse CRS definition: xxx.gdalalg_vector_create.cpp L373-L387非法几何类型则报Unsupported geometry type: xxx.L357-L368。十、小结gdal vector create为 GDAL 3.13 的矢量处理工具链补齐了“结构先行”的一环它既能快速产出最简数据集也能借助--like与 OGR_SCHEMA 实现结构级复用还能嵌入 pipeline 作为首步。结合 官方文档、核心源码 与 测试套件 三者的印证本文覆盖了该命令的全部参数、互斥约束、覆盖语义与典型实战模式可作为日常使用与二次开发的速查手册。赞分享GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载相关推荐GDAL gdal raster create 完全指南用一行命令从零初始化栅格数据集GDAL gdal raster create 完全指南用一行命令从零初始化栅格数据集 导读 gdal raster create 是 GDAL 3.11GIS遥感数据工程GDAL 矢量图层创建选项 --lco 完全指南从命令行用法到驱动级参数详解GDAL 矢量图层创建选项 lco 完全指南从命令行用法到驱动级参数详解 导读 lco 即 layer creation option 是 GDAL 所有GIS遥感数据工程GDAL Python Vector API 完全指南osgeo.ogr 矢量数据模型与实操GDAL Python Vector API 完全指南osgeo.ogr 矢量数据模型与实操 本文是 GDAL 仓库官方 Python 矢量 API 参考页GIS遥感数据工程上一篇3步实现Figma全界面中文转换FigmaCN插件完全指南下一篇FluidVoice手动安装指南从下载Release到完成首次语音输入创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考