Skip to main content

Official data package for cnmaps

Project description

cnmaps-data globe

cnmaps-data

cnmaps-datacnmaps 的官方数据包,用于承载与 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 或自定义组合码,例如 PSEIND-PAK-JK
  • 中国行政区记录默认写作 CHN
  • 香港特别行政区相关记录写作 HKG,澳门特别行政区相关记录写作 MAC
  • 台湾相关记录仍统一写作 CHN

数据来源

行政区边界所依据的公开数据出处如下。仓库内几何与属性可能经过裁剪、拓扑处理、与中国边界做几何扣除或与中文名映射合并,以包内实际文件为准。

  • 中国省 / 市 / 县:原始数据来自 高德(Amap)。独立对照与学术引用可使用 GaryBikini/ChinaAdminDivisonSHP v2.0(2021),Zenodo DOI 10.5281/zenodo.4167299
  • 国外国家与地区(国界级)World Bank Official Boundaries - Admin 0World Bank Data Catalog),用于提供全球国家级边界、领地及争议区几何。仓库内的 cn-neighborsworld-countries 会在此基础上继续执行邻国吸附、中国口径扣除、争议区分类整理和中文名称回写。

cn-neighborsworld-countries 的中国一侧几何与 amap 一致,国外一侧基于上述世界国界数据派生,详见各小节说明。

边界处理效果

下面几张图用于展示当前数据包对中国周边边界、争议区以及海上方向的处理效果:

  • 中国使用暗红色表示
  • 周边国家与地区使用蓝绿色表示
  • 单独保留的争议地区使用浅黄色表示

总览

cn-neighbors overview

中印边界与克什米尔争议区

india border handling

南海方向

south china sea handling

中国-塔吉克斯坦边界

china tajikistan border handling

关于中国和塔吉克斯坦之间出现的空隙,需要额外说明:

  • 中国和塔吉克斯坦之间长期存在未定国界问题。
  • 世界银行及其他国际版本边界数据在中塔边界处采用的口径,与中国大陆正规地图的未定国界口径并不一致。
  • 中国大陆当前主流正规地图在这一段边界上的口径,相比国际版本更小;这和其他“自己主张更大范围”的争议区不同,属于“当前中国大陆公开审图口径反而更吃亏”的情况。
  • 天地图、高德、百度等带审图号的主流地图产品,目前在这里普遍都采用这一更小的版本。
  • 因此,当 amap 的中国边界与世界银行的外国边界在中塔边境直接拼接时,会留下图中可见的一片空白区域。
  • 基于最小改动原则,cnmaps-data 目前对这一处仅做说明,不做额外人工填补或再分配处理。

更多信息请参考维基百科:中国—塔吉克斯坦边界

与 cnmaps 的关系

cnmaps 运行时会优先发现并使用已安装的数据 provider。对官方数据包来说,cnmaps-data 会通过 Python entry point 暴露 provider,cnmaps 安装后默认会把它作为依赖一起安装。

也就是说,正常情况下用户只需要:

pip install cnmaps

就会同时得到:

  • cnmaps
  • cnmaps-data

数据发现机制

cnmaps 当前按以下优先级查找数据源:

  1. 已安装包里注册的 cnmaps.data_providers entry point
  2. 官方包 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

构建结果会包含:

  • sdist
  • wheel

数据检查

本仓库自带检查脚本,安装后可以直接执行:

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。发布流程通常为:

  1. 更新版本号
  2. 推送代码
  3. 在 GitHub 创建 Release
  4. Actions 自动构建并发布到 PyPI

相关文档

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

cnmaps_data-1.1.2.tar.gz (75.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cnmaps_data-1.1.2-py3-none-any.whl (77.2 MB view details)

Uploaded Python 3

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

Hashes for cnmaps_data-1.1.2.tar.gz
Algorithm Hash digest
SHA256 89301300f8526979334c366fbf4ee0527fde5d9ee0d07071a0ba3fc430762dbe
MD5 0628b74419c8fefdb687c7d9b99fe74d
BLAKE2b-256 e05d063957d3d184bec182f53fce2e0d3a0a72eae7827f6017bfde74f8c1dbc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cnmaps_data-1.1.2.tar.gz:

Publisher: pypi-publish.yml on cnmetlab/cnmaps-data

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for cnmaps_data-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 db9f0f6b80ea81819d1c65fbc038753845925a375fe9986dbe626236f7d0d273
MD5 09a90c0046c01e143cd4ec702b752fbf
BLAKE2b-256 48702d727f4d94296f527b677539a6e29a12a4a4ed930973675abd4fd75b91b8

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page