Official data package for cnmaps
Project description
cnmaps-data
cnmaps-data 是 cnmaps 的官方数据包,用于承载与 cnmaps 配套的边界数据、索引数据和样例数据。
它的设计目标有三点:
- 把
cnmaps的功能代码与大体积数据解耦 - 让
cnmaps主包可以更轻、更高频地迭代 - 为第三方数据包提供可复用的协议参考
包含的数据
当前 cnmaps-data 内置三类数据集:
- 行政区边界数据
- 索引库:
cnmaps_data/data/index/administrative.db - 数据根目录:
cnmaps_data/data/datasets/administrative/ - 当前包含:
amap:高德来源的中国省 / 市 / 县行政区边界(包内目录与索引字段source = 高德;出处见「数据来源」)cn-neighbors:基于中国官方口径边界与世界银行国界数据派生的邻国国家级边界(目录独立,但 SQLite 中source = 世界银行)world-countries:除中国及cn-neighbors外的其他世界国家级边界(目录独立,但 SQLite 中source = 世界银行)
- 地理边界数据
- 数据根目录:
cnmaps_data/data/datasets/geography/
- 数据根目录:
- 样例数据
- 数据根目录:
cnmaps_data/data/datasets/sample/
- 数据根目录:
关于 cn-neighbors:
- 它只提供“国”一级边界,不下探到邻国的省州级行政区。
- 它的几何是基于
cnmaps-data中的中国边界,结合外部世界边界源数据裁剪/派生得到。 - 这是一套带明确口径说明的派生数据,不应与国际通行的中立边界数据混淆。
- 在 SQLite 中,它与
world-countries一样统一标记为source = 世界银行,二者的区别主要通过path目录前缀体现。
关于 world-countries:
- 它只提供“国”一级边界。
- 当前数据库中的国家名称统一使用中文名,GeoJSON 中同时保留
name_en英文名。 - 它不包含中国,也不包含已经在
cn-neighbors中单独处理的邻国。 - 它也不会以国家级记录的形式单独收录台湾、香港、澳门。
- 它在写出前会统一扣除
cnmaps-data当前中国边界所覆盖的几何区域,以避免与中国口径边界产生重叠。 - 中文名映射表只是维护辅助资料;最终名称仍直接写入 SQLite 和 GeoJSON 产物中。
- 除主权国家外,它现在也纳入了一批带
iso3的海外领地/属地记录,例如格陵兰。 - 与
cn-neighbors一样,它在 SQLite 中统一标记为source = 世界银行。
关于 iso3:
ADMINISTRATIVE表现在正式包含iso3列。- 国外国家 / 地区级记录写入各自的
ISO3或自定义组合码,例如PSE、IND-PAK-JK。 - 中国行政区记录默认写作
CHN。 - 香港特别行政区相关记录写作
HKG,澳门特别行政区相关记录写作MAC。 - 台湾相关记录仍统一写作
CHN。
数据来源
行政区边界所依据的公开数据出处如下。仓库内几何与属性可能经过裁剪、拓扑处理、与中国边界做几何扣除或与中文名映射合并,以包内实际文件为准。
- 中国省 / 市 / 县:原始数据来自 高德(Amap)。独立对照与学术引用可使用 GaryBikini/ChinaAdminDivisonSHP v2.0(2021),Zenodo DOI 10.5281/zenodo.4167299。
- 国外国家与地区(国界级):World Bank Official Boundaries - Admin 0(World Bank Data Catalog),用于提供全球国家级边界、领地及争议区几何。仓库内的
cn-neighbors与world-countries会在此基础上继续执行邻国吸附、中国口径扣除、争议区分类整理和中文名称回写。
cn-neighbors 与 world-countries 的中国一侧几何与 amap 一致,国外一侧基于上述世界国界数据派生,详见各小节说明。
边界处理效果
下面几张图用于展示当前数据包对中国周边边界、争议区以及海上方向的处理效果:
- 中国使用暗红色表示
- 周边国家与地区使用蓝绿色表示
- 单独保留的争议地区使用浅黄色表示
总览
中印边界与克什米尔争议区
南海方向
中国-塔吉克斯坦边界
关于中国和塔吉克斯坦之间出现的空隙,需要额外说明:
- 中国和塔吉克斯坦之间长期存在未定国界问题。
- 世界银行及其他国际版本边界数据在中塔边界处采用的口径,与中国大陆正规地图的未定国界口径并不一致。
- 中国大陆当前主流正规地图在这一段边界上的口径,相比国际版本更小;这和其他“自己主张更大范围”的争议区不同,属于“当前中国大陆公开审图口径反而更吃亏”的情况。
- 天地图、高德、百度等带审图号的主流地图产品,目前在这里普遍都采用这一更小的版本。
- 因此,当
amap的中国边界与世界银行的外国边界在中塔边境直接拼接时,会留下图中可见的一片空白区域。 - 基于最小改动原则,
cnmaps-data目前对这一处仅做说明,不做额外人工填补或再分配处理。
更多信息请参考维基百科:中国—塔吉克斯坦边界
与 cnmaps 的关系
cnmaps 运行时会优先发现并使用已安装的数据 provider。对官方数据包来说,cnmaps-data 会通过 Python entry point 暴露 provider,cnmaps 安装后默认会把它作为依赖一起安装。
也就是说,正常情况下用户只需要:
pip install cnmaps
就会同时得到:
cnmapscnmaps-data
数据发现机制
cnmaps 当前按以下优先级查找数据源:
- 已安装包里注册的
cnmaps.data_providersentry point - 官方包
cnmaps_data.provider
因此,第三方数据包如果想兼容 cnmaps,推荐使用 entry point 方式提供自己的 provider。当前 cnmaps 2.x 不再依赖内置旧数据目录,也不再以同级源码目录作为正式运行时发现路径。
对第三方开发者
如果你希望开发自己的 cnmaps 数据包,请优先阅读:
这份文档里会说明:
- provider 需要实现什么接口
manifest.json需要有哪些字段- SQLite 索引库需要满足什么规则
- GeoJSON 文件需要满足什么格式
- 如何用检查脚本验证你的数据包
本地开发
在仓库根目录可以直接构建:
python -m build
更新索引库后,若需同步更新文档中的省 / 市 / 县与国外名称列表,可执行:
python scripts/generate_dataset_index_docs.py
如果需要重建 cn-neighbors 数据,可使用:
python scripts/generate_cn_neighbors.py --world-shp /path/to/WB_GAD_ADM0_complete.shp
如果需要生成其他世界国家级边界,可使用:
python scripts/generate_world_countries.py --world-shp /path/to/WB_GAD_ADM0_complete.shp
这个脚本会在输出 world-countries 前,先对每个国家执行一次基于中国边界的几何扣除。
如果需要把外部映射表中的中文名批量回写到 SQLite/GeoJSON,可使用:
python scripts/update_country_names.py
如果需要在修改数据库结构或生成逻辑后,重新生成国外名称索引页,可执行:
python scripts/generate_dataset_index_docs.py
构建结果会包含:
sdistwheel
数据检查
本仓库自带检查脚本,安装后可以直接执行:
cnmaps-data-check
或者:
python -m cnmaps_data.checker
它会检查:
manifest.json是否完整- 数据目录是否存在
- 行政区索引库 schema 是否符合要求
- 索引中声明的 GeoJSON 文件是否真实存在
- GeoJSON 的基本结构是否满足
cnmaps当前读取规则
如果要检查某个自定义目录,也可以显式传入:
python -m cnmaps_data.checker /path/to/your-data-package/cnmaps_data
如果你的命令行里还没有直接找到 cnmaps-data-check,通常是因为当前 shell 没有激活对应的 Python 环境;这种情况下直接使用 python -m cnmaps_data.checker ... 即可。
发布
本仓库已配置 GitHub Actions + PyPI Trusted Publishing。发布流程通常为:
- 更新版本号
- 推送代码
- 在 GitHub 创建 Release
- Actions 自动构建并发布到 PyPI
相关文档
- 开发者手册
- 数据集覆盖范围索引(省 / 市 / 县与国外名称列表,由索引库生成)
- 国家名称与 ISO3 映射表
- 更新日志
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cnmaps_data-1.1.2.tar.gz.
File metadata
- Download URL: cnmaps_data-1.1.2.tar.gz
- Upload date:
- Size: 75.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89301300f8526979334c366fbf4ee0527fde5d9ee0d07071a0ba3fc430762dbe
|
|
| MD5 |
0628b74419c8fefdb687c7d9b99fe74d
|
|
| BLAKE2b-256 |
e05d063957d3d184bec182f53fce2e0d3a0a72eae7827f6017bfde74f8c1dbc8
|
Provenance
The following attestation bundles were made for cnmaps_data-1.1.2.tar.gz:
Publisher:
pypi-publish.yml on cnmetlab/cnmaps-data
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cnmaps_data-1.1.2.tar.gz -
Subject digest:
89301300f8526979334c366fbf4ee0527fde5d9ee0d07071a0ba3fc430762dbe - Sigstore transparency entry: 1214934054
- Sigstore integration time:
-
Permalink:
cnmetlab/cnmaps-data@e2a1a34677dfe3db582f21c4aefab9f6c26c6726 -
Branch / Tag:
refs/tags/1.1.2 - Owner: https://github.com/cnmetlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@e2a1a34677dfe3db582f21c4aefab9f6c26c6726 -
Trigger Event:
release
-
Statement type:
File details
Details for the file cnmaps_data-1.1.2-py3-none-any.whl.
File metadata
- Download URL: cnmaps_data-1.1.2-py3-none-any.whl
- Upload date:
- Size: 77.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db9f0f6b80ea81819d1c65fbc038753845925a375fe9986dbe626236f7d0d273
|
|
| MD5 |
09a90c0046c01e143cd4ec702b752fbf
|
|
| BLAKE2b-256 |
48702d727f4d94296f527b677539a6e29a12a4a4ed930973675abd4fd75b91b8
|
Provenance
The following attestation bundles were made for cnmaps_data-1.1.2-py3-none-any.whl:
Publisher:
pypi-publish.yml on cnmetlab/cnmaps-data
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cnmaps_data-1.1.2-py3-none-any.whl -
Subject digest:
db9f0f6b80ea81819d1c65fbc038753845925a375fe9986dbe626236f7d0d273 - Sigstore transparency entry: 1214934107
- Sigstore integration time:
-
Permalink:
cnmetlab/cnmaps-data@e2a1a34677dfe3db582f21c4aefab9f6c26c6726 -
Branch / Tag:
refs/tags/1.1.2 - Owner: https://github.com/cnmetlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@e2a1a34677dfe3db582f21c4aefab9f6c26c6726 -
Trigger Event:
release
-
Statement type: