pdok/geopackage-validator使用默认验证规则集验证GeoPackage:
shgpkg_path=相对路径/至/文件.gpkg docker run -v "$(pwd)":/gpkg --rm pdok/geopackage-validator validate --gpkg-path "/gpkg/${gpkg_path}"
使用默认验证规则集及模式文件验证GeoPackage:
shschema_path=相对路径/至/模式.json gpkg_path=相对路径/至/文件.gpkg docker run -v "$(pwd)":/gpkg --rm pdok/geopackage-validator validate --gpkg-path "/gpkg/${gpkg_path}" --table-definitions-path "/gpkg/${schema_path}"
生成模式文件:
shschema_path=相对路径/至/模式.json gpkg_path=相对路径/至/文件.gpkg docker run -v "$(pwd)":/gpkg --rm pdok/geopackage-validator generate-definitions --gpkg-path "/gpkg/${gpkg_path}" > "$schema_path"
GeoPackage验证器可验证.gpkg文件是否符合一系列标准规范。当前支持的检查项如下(另见“show-validations”命令):
| 验证代码** | 描述 |
|---|---|
| UNKNOWN_ERROR | 不得出现意外的(GDAL)错误。 |
| RQ0 | 遗留项: * GeoPackage必须符合给定JSON或YAML定义中的表名。 |
| RQ1 | 图层名称必须以字母开头,允许的字符为小写a-z、数字或下划线。 |
| RQ2 | 图层必须至少包含一个要素。 |
| RQ3 | 遗留项: * 图层要素应具有允许的几何类型(POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING或MULTIPOLYGON之一)。 |
| RQ4 | GeoPackage不应定义视图。 |
| RQ5 | 几何应有效。 |
| RQ6 | 列名必须以字母开头,允许的字符为小写a-z、数字或下划线。 |
| RQ7 | 表应具有带唯一索引的要素ID列。 |
| RQ8 | GeoPackage必须符合给定的JSON或YAML定义。 |
| RQ9 | 所有几何表必须具有rtree索引。 |
| RQ10 | 所有几何表的rtree索引必须有效。 |
| RQ11 | OGR索引要素计数必须是最新的。 |
| RQ12 | 仅允许以下EPSG空间参考系统:28992、3034、3035、3038、3039、3040、3041、3042、3043、3044、3045、3046、3047、3048、3049、3050、3051、4258、4936、4937、5730、7409。 |
| RQ13 | 所有GEOMETRY要素必须使用相同的默认空间参考系统。 |
| RQ14 | gpkg_geometry_columns表中的geometry_type_name必须为POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING或MULTIPOLYGON之一。 |
| RQ15 | 所有表几何必须与gpkg_geometry_columns表中的geometry_type_name匹配。 |
| RQ16 | 所有图层和列名长度不得超过53个字符。 |
| RC17 | 建议所有GEOMETRY类型列命名为“geom”。 |
| RC18 | 建议所有GEOMETRY类型列使用相同的名称。 |
| RC19 | 建议仅在必要时使用多维几何坐标(高程和测量值)。 |
| RC20 | 建议所有(MULTI)POLYGON几何的外环采用逆时针方向,所有内环采用顺时针方向。 |
| UNKNOWN_WARNINGS | 建议关注意外的(GDAL)警告。 |
* 遗留要求仅在验证命令中明确请求验证集时执行。
** 从0.8.0版本开始,建议项与要求项纳入同一序列。此后,检查项将始终保留其代码的整数部分,即使后续验证类型在要求和建议之间转换。
各规则的荷兰语详细解释及原因可参考此处。
GeoPackage验证器支持以下GeoPackage版本:
本工具需要:
推荐使用Docker镜像。若满足上述依赖,也可通过pip安装(pip install pdok-geopackage-validator)。
拉取最新版本的Docker镜像(首次使用或更新时需要):
bashdocker pull pdok/geopackage-validator:latest
或从源码构建Docker镜像:
bashdocker build -t pdok/geopackage-validator .
可直接在容器中运行命令,子命令可直接调用:
bashdocker run -v ${PWD}:/gpkg --rm pdok/geopackage-validator validate -t /path/to/generated_definitions.json --gpkg-path /gpkg/tests/data/test_allcorrect.gpkg
要执行RQ8验证,需先生成定义文件:
bashdocker run -v ${PWD}:/gpkg --rm pdok/geopackage-validator generate-definitions --gpkg-path /path/to/file.gpkg
bashUsage: geopackage-validator validate [OPTIONS] GeoPackage验证器,用于验证本地文件或S3存储中的文件。当文件路径以'/vsis3'或'/vsicurl'开头时,将使用GDAL虚拟文件系统访问S3上的文件,无需直接下载。详见[***] VSI环境参数和可选参数以S3_为前缀(AWS_前缀的环境参数同样适用)。 示例: vsicurl: geopackage-validator validate --gpkg-path /vsicurl/[***] vsis3: geopackage-validator validate --gpkg-path /vsis3/bucketname/key/to/public.gpkg --s3-signing-region eu-central-1 --s3-secret-key secret --s3-access-key acces-key --s3-secure=false --s3-virtual-hosting false --s3-endpoint-no-protocol minio-url.nl 环境变量方式: S3_SECRET_KEY=secret S3_ACCESS_KEY=acces-key S3_SIGNING_REGION=eu-central-1 S3_SECURE=false S3_VIRTUAL_HOSTING=false S3_ENDPOINT_NO_PROTOCOL=minio-url.nl geopackage-validator validate --gpkg-path /vsis3/bucketname/key/to/public.gpkg AWS环境变量方式: AWS_SECRET_ACCESS_KEY=secret AWS_ACCESS_KEY_ID=acces-key AWS_DEFAULT_REGION=eu-central-1 AWS_HTTPS=NO AWS_VIRTUAL_HOSTING=FALSE AWS_S3_ENDPOINT=minio-url.nl geopackage-validator validate --gpkg-path /vsis3/bucketname/key/to/public.gpkg Options: --gpkg-path FILE 指向geopackage.gpkg文件的路径 [环境变量: GPKG_PATH] -t, --table-definitions-path FILE 指向表定义JSON或YAML文件的路径(通过generate-definitions命令生成) --validations-path FILE 要运行的验证集路径。若未指定validations-path和validations,将运行所有验证 [环境变量: VALIDATIONS_FILE] --validations TEXT 逗号分隔的验证规则列表(例如--validations RQ1,RQ2,RQ3)。若未指定validations-path和validations,将运行所有验证 [环境变量: VALIDATIONS] --exit-on-fail 验证失败时以代码1退出 --yaml 输出YAML格式 --s3-endpoint-no-protocol TEXT S3服务的端点(不含协议)[环境变量: S3_ENDPOINT_NO_PROTOCOL] --s3-access-key TEXT S3服务的访问密钥 [环境变量: S3_ACCESS_KEY] --s3-secret-key TEXT S3服务的密钥 [环境变量: S3_SECRET_KEY] --s3-bucket TEXT S3存储桶名称 [环境变量: S3_BUCKET] --s3-key TEXT S3存储桶中的文件键 [环境变量: S3_KEY] --s3-secure BOOLEAN 是否使用TLS安全连接S3 [环境变量: S3_SECURE] --s3-virtual-hosting TEXT TRUE:通过虚拟主机名标识存储桶(如mybucket.cname.domain.com);FALSE:将存储桶作为URI顶层目录(如cname.domain.com/mybucket)。便捷参数,等同于GDAL的AWS_VIRTUAL_HOSTING [环境变量: S3_VIRTUAL_HOSTING] --s3-signing-region TEXT S3签名区域。便捷参数,等同于GDAL的AWS_DEFAULT_REGION [环境变量: S3_SIGNING_REGION] --s3-no-sign-request TEXT 设置后禁用请求签名,适用于公共访问权限的存储桶。便捷参数,等同于GDAL的AWS_NO_SIGN_REQUEST [环境变量: S3_NO_SIGN_REQUEST] -v, --verbosity LVL 日志级别:CRITICAL、ERROR、WARNING、INFO或DEBUG --help 显示帮助信息并退出
示例:
bashdocker run -v ${PWD}:/gpkg --rm pdok/geopackage-validator validate -t /path/to/generated_definitions.json --gpkg-path /gpkg/tests/data/test_allcorrect.gpkg
仅运行特定验证规则:
通过文件指定:
bashdocker run -v ${PWD}:/gpkg --rm pdok/geopackage-validator validate --gpkg-path tests/data/test_allcorrect.gpkg --validations-path tests/validationsets/example-validation-set.json
或通过命令行指定:
bashdocker run -v ${PWD}:/gpkg --rm pdok/geopackage-validator validate --gpkg-path tests/data/test_allcorrect.gpkg --validations RQ1,RQ2,RQ3
显示验证命令中可执行的所有可能验证规则:
bashUsage: geopackage-validator show-validations [OPTIONS] 显示验证命令中可执行的所有可能验证规则。 Options: -v, --verbosity LVL 日志级别:CRITICAL、ERROR、WARNING、INFO或DEBUG --help 显示帮助信息并退出
bashUsage: geopackage-validator generate-definitions [OPTIONS] 为本地或S3存储中的GeoPackage生成表定义。生成的JSON或YAML定义文件可在验证步骤中通过--table-definitions-path参数使用。当文件路径以'/vsi'开头时,将使用GDAL虚拟文件系统访问S3上的文件,无需直接下载。详见[***] VSI环境参数和可选参数以S3_为前缀(AWS_前缀的环境参数同样适用)。 示例: vsicurl: geopackage-validator validate --gpkg-path /vsicurl/[***] vsis3: geopackage-validator generate-definitions --gpkg-path /vsis3/bucketname/key/to/public.gpkg --s3-signing-region eu-central-1 --s3-secret-key secret --s3-access-key acces-key --s3-secure=false --s3-virtual-hosting false --s3-endpoint-no-protocol minio-url.nl 环境变量方式: S3_SECRET_KEY=secret S3_ACCESS_KEY=acces-key S3_SIGNING_REGION=eu-central-1 S3_SECURE=false S3_VIRTUAL_HOSTING=false S3_ENDPOINT_NO_PROTOCOL=minio-url.nl geopackage-validator generate-definitions --gpkg-path /vsis3/bucketname/key/to/public.gpkg Options: --gpkg-path FILE 指向geopackage.gpkg文件的路径 [环境变量: GPKG_PATH] --yaml 输出YAML格式 --s3-endpoint-no-protocol TEXT S3服务的端点(不含协议)[环境变量: S3_ENDPOINT_NO_PROTOCOL] --s3-access-key TEXT S3服务的访问密钥 [环境变量: S3_ACCESS_KEY] --s3-secret-key TEXT S3服务的密钥 [环境变量: S3_SECRET_KEY] --s3-bucket TEXT S3存储桶名称 [环境变量: S3_BUCKET] --s3-key TEXT S3存储桶中的文件键 [环境变量: S3_KEY] --s3-secure BOOLEAN 是否使用TLS安全连接S3 [环境变量: S3_SECURE] --s3-virtual-hosting TEXT TRUE:通过虚拟主机名标识存储桶(如mybucket.cname.domain.com);FALSE:将存储桶作为URI顶层目录(如cname.domain.com/mybucket)。便捷参数,等同于GDAL的AWS_VIRTUAL_HOSTING [环境变量: S3_VIRTUAL_HOSTING] --s3-signing-region TEXT S3签名区域。便捷参数,等同于GDAL的AWS_DEFAULT_REGION [环境变量: S3_SIGNING_REGION] --s3-no-sign-request TEXT 设置后禁用请求签名,适用于公共访问权限的存储桶。便捷参数,等同于GDAL的AWS_NO_SIGN_REQUEST [环境变量: S3_NO_SIGN_REQUEST] -v, --verbosity LVL 日志级别:CRITICAL、ERROR、WARNING、INFO或DEBUG --help 显示帮助信息并退出
建议使用docker-compose进行本地开发,可实时代码编辑和测试,并确保使用正确的GDAL/OGR版本及Spatialite 5.0.0。首先使用本机的用户ID和组ID构建本地镜像:
bashdocker-compose build --build-arg USER_ID=`id -u` --build-arg GROUP_ID=`id -g`
可通过以下命令运行脚本:
bashdocker-compose run --rm validator geopackage-validator
该命令可直接访问当前目录下的文件。如需访问其他文件,可在docker-compose.yaml中添加或编辑卷配置。
Docker中已安装IPython:
bashdocker-compose run --rm validator ipython
为保持Python文件格式统一,可定期运行:
bashdocker-compose run --rm validator black .
定期运行测试,同时检查pyflakes和black格式:
bashdocker-compose run --rm validator pytest
在GitHub中发布时,需更新geopackage_validator.constants.py中的__version__,创建并推送新标签至master分支,然后在GitHub中创建新发布。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务