一个提供全面且符合中国视角的全球中文地理数据的 npm 包。
本项目源于我在开发 Myucloud Odyssey时遇到的一个挑战:难以找到符合国内法规且提供高质量中文地理数据的地图数据源。 为了解决这一痛点,于是我暂停 Myucloud Odyssey 的开发,转而投入到先收集、整理和编译符合规范的地理数据中。
因此,chinese-global-compliant-geodata
包的内容将伴随 Myucloud Odyssey 项目的需求而不断扩充。非常欢迎补充缺失的数据,共同完善这个项目!
- 提供全面且符合中华人民共和国视角的全球中文地理数据。
- 数据严格遵循中国国家地理信息标准。
- 广泛兼容主流地图可视化框架(如 ECharts、Mapbox、Leaflet 等)。
- 数据优化高效,体积小巧,加载迅速,通过
simplify-js
库对 GeoJSON 数据进行简化处理。 - 支持按需加载,有效减少资源消耗。
- 全面支持 TypeScript、原生 JavaScript 和 Node.js 开发环境。
通过以下命令轻松安装本包:
npm install chinese-global-compliant-geodata
# 或者
pnpm add chinese-global-compliant-geodata
本包提供了简洁的 API,方便你在不同开发环境中使用。以下是导入模块和使用核心功能的示例。
-
在 Node.js (CommonJS) 或原生 JavaScript 中:
const { getWorldGeoJSON, getCountyOrRegionGeoJSON, getRegionGeoJSON } = require('chinese-global-compliant-geodata');
-
在 TypeScript 或支持 ES Modules 的环境中:
import { getWorldGeoJSON, getCountyOrRegionGeoJSON, getRegionGeoJSON } from 'chinese-global-compliant-geodata';
-
在浏览器中 (通过 CDN):
<script src="https://unpkg.com/chinese-global-compliant-geodata/dist/index.js"></script> <script> // 模块将暴露在全局对象 chineseCompliantGlobalGeodata 下 const { getWorldGeoJSON, getCountyOrRegionGeoJSON, getRegionGeoJSON } = chineseCompliantGlobalGeodata; </script>
以下是本包核心功能的典型使用示例。更详细的函数参数和返回值说明,请参考下方的 API 文档。
// 示例 1: 获取世界整体轮廓数据
const worldData = getWorldGeoJSON();
console.log('世界数据特征数量:', worldData ? worldData.features.length : '无数据');
// 示例 2: 获取中国(ISO3: CHN)的世界 GeoJSON 数据
const chinaWorldData = getWorldGeoJSON('CHN');
console.log('中国(CHN)的世界数据特征数量:', chinaWorldData ? chinaWorldData.features.length : '无数据');
// 示例 3: 获取中国(ISO3: CHN)的省级(level 1)数据,并通过GB国标码过滤北京市
const beijingProvinceData = getCountyOrRegionGeoJSON('CHN', 1, 'gb', '156110000');
console.log('北京市(省级)数据特征数量:', beijingProvinceData ? beijingProvinceData.features.length : '无数据');
// 示例 4: 获取日本(ISO3: JPN)的二级行政区(level 2)数据
const japanLevel2Data = getCountyOrRegionGeoJSON('JPN', 2);
console.log('日本二级行政区数据特征数量:', japanLevel2Data ? japanLevel2Data.features.length : '无数据');
// 示例 5: 获取中国台湾(ISO3: CHN, Region Code: TW)地区二级(level 2)数据,并通过名称过滤台北市
const taipeiRegionData = getRegionGeoJSON('CHN', 'TW', 2, 'name', '台北');
console.log('中国台湾(台北)地区数据特征数量:', taipeiRegionData ? taipeiRegionData.features.length : '无数据');
以下是本包提供的主要函数及其详细说明。
功能:获取全球地理数据,可选择按国家过滤。
-
iso3Code
(string): 可选。输入国家的 ISO 三位代码(例如:'CHN'
代表中国)。- 如果提供此参数,函数将返回
world.json
中匹配该 ISO 代码的单个国家地理特征。 - 如果省略此参数,函数将返回全球所有国家的地理特征。
- 如果提供此参数,函数将返回
支持的国家列表及其数据详情,请参考 世界地理数据说明 文档。
- GeoJSON
FeatureCollection
对象,包含地理数据;如果数据加载失败或未找到,则返回null
。
功能:根据国家 ISO 三位代码和行政层级获取 GeoJSON 数据,并支持按属性过滤。
-
iso3Code
(string): 必填。输入国家的 ISO 三位代码 (例如:'CHN'
,'JPN'
,'KOR'
),不区分大小写。 -
level
(number): 必填。所需数据的行政层级。- 通常
0
代表国家整体轮廓。 -
1
通常代表省级或一级行政区划。 -
2
或3
代表市级、县级或其他次级行政区划。 - 具体层级划分请参考各国家数据说明文档。
- 通常
-
filterKey?
(string): 可选。用于过滤 GeoJSON 特征属性的键名。例如,你可以使用'name'
来匹配中文名称,或使用'full_name'
来匹配完整中文名称,还可以使用'gb'
来匹配国家标准行政区划代码。 -
filterValue?
(string): 可选。与filterKey
对应的属性值,用于精确匹配。例如,如果filterKey
是'name'
,filterValue
可以是'北京'
;如果filterKey
是'full_name'
,filterValue
可以是'北京市'
;如果filterKey
是'gb'
,filterValue
可以是'156110000'
。
目前支持的国家:
- GeoJSON
FeatureCollection
对象,包含过滤后的地理数据;如果未找到对应数据、路径不正确或加载失败,则返回null
并在控制台输出错误或警告信息。
getRegionGeoJSON(iso3Code: string, regionCode: string, level?: number, filterKey?: string, filterValue?: string)
功能:获取指定国家(如中国)下特定区域(如台湾省)的 GeoJSON 数据,并支持按属性过滤。
-
iso3Code
(string): 必填。输入国家的 ISO 三位代码(例如:'CHN'
代表中国),不区分大小写。 -
regionCode
(string): 必填。二级行政单位的两位字母代码,用于指定特定区域。例如,'TW'
(台湾省),'HK'
(香港特别行政区),'MO'
(澳门特别行政区)。不区分大小写。 -
level
(number): 可选,默认值为2
。所需数据的行政层级(例如:1
,2
,3
),具体层级取决于数据来源。 -
filterKey?
(string): 可选。用于过滤 GeoJSON 特征属性的键名。例如,你可以使用'name'
来匹配中文名称,或使用'full_name'
来匹配完整中文名称,还可以使用'gb'
来匹配国家标准行政区划代码。 -
filterValue?
(string): 可选。与filterKey
对应的属性值,用于精确匹配。例如,如果filterKey
是'name'
,filterValue
可以是'台北'
;如果filterKey
是'full_name'
,filterValue
可以是'台北市'
;如果filterKey
是'gb'
,filterValue
可以是'710100'
。
目前仅支持 中国台湾省。
- GeoJSON
FeatureCollection
对象,包含过滤后的地理数据;如果未找到对应数据、路径不正确或加载失败,则返回null
并在控制台输出错误或警告信息。
本包目前使用的地理数据来源于以下渠道,经过标准化处理,确保数据的准确性和合法性。 点击对应链接可查看更详细的数据来源、更新时间、包含范围及特别说明:
- 全球地理数据:Surbowl
-
中国地理数据:中国国家地理信息公共服务平台—天地图
- 台湾省地理数据:GeoJSON.CN
- 日本地理数据:SmartNews(スマートニュース)
- 韩国地理数据:NeuroWhAI
- 英国地理数据:geoBoundaries 项目
所有数据均经过标准化处理,包括:
- 统一使用 WGS84 坐标系统
- 规范化中文译名,遵循相关国家标准
- 按行政区划代码排序
- 添加必要的属性字段(如中文名称、英文名称等)
- 优化数据结构,确保数据的一致性和可用性
我们非常欢迎并感谢社区的贡献!如果你有任何改进建议、新的地理数据来源,或者发现任何问题,请随时通过以下方式参与:
- 提交 Issue:如果你发现 bug、有功能请求或需要澄清之处,请在项目的 GitHub Issues 页面提交。
-
提交 Pull Request:我们热忱欢迎高质量的代码贡献和数据更新。在提交 Pull Request 之前,请务必确保您的代码符合项目规范并通过所有测试。针对数据更新,我们有以下明确要求:
- 数据准确性:必须包含准确的中文地名。
- 多语言支持(可选):在可能的情况下,请提供对应地区的原语言地名写法。
- 政治合规性:数据内容必须完全符合中华人民共和国的立场和相关法律法规。 不符合上述任何要求的数据提交将不予合并。
感谢你的贡献,这将帮助我们共同完善这个项目!
为了参与项目开发或贡献符合规范的中文 GeoJSON 数据,请遵循以下步骤设置你的开发环境:
-
安装 pnpm (可选): 如果你偏好使用
pnpm
,可以全局安装它:npm install -g pnpm@8.15.4
-
克隆仓库:
git clone https://github.com/JayMuShui/chinese-global-compliant-geodata.git cd chinese-global-compliant-geodata
-
安装依赖:
npm install # 或者 pnpm install
-
构建项目:
npm run build # 或者 pnpm build
-
压缩 GeoJSON 文件: 如果你想压缩
src/geojson
目录下所有的.json
文件,移除它们的缩进和空格,可以运行以下命令:npm run minify-geojson # 或者 pnpm minify-geojson
本项目旨在提供全面且符合中华人民共和国视角的全球中文地理数据,并致力于服务面向中国国内市场的合规项目开发。我们严格遵守相关法律法规和地理信息标准。
重要提示:
- 我们坚决反对任何恶意提交、上传或合并不合规、不准确或具有争议性的内容。
- 使用者需自行承担因使用非官方渠道或修改数据所产生的全部风险和责任。
- 为确保您所获取数据的完整性和未被篡改,请前往项目的 Releases 页面 查看最新发布包的 MD5 或 SHA256 校验码。