Skip to content

Commit

Permalink
Merge branch 'refactor-2.0.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
modood committed Feb 4, 2018
2 parents 88fcf4a + 19befe4 commit d346b88
Show file tree
Hide file tree
Showing 33 changed files with 715,689 additions and 558 deletions.
255 changes: 190 additions & 65 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,101 +6,226 @@
[![downloads](https://img.shields.io/npm/dt/china-division.svg)](https://www.npmjs.com/package/china-division)
[![license](https://img.shields.io/badge/license-WTFPL%20--%20Do%20What%20the%20Fuck%20You%20Want%20to%20Public%20License-green.svg)](https://raw.githubusercontent.com/modood/Administrative-divisions-of-China/master/LICENSE)

中华人民共和国行政区划:省份、城市、区县、乡镇(街道)
中华人民共和国行政区划(五级):省级、地级、县级、乡级和村级。

* 数据来源(民政部、国家统计局):
## 数据来源

* 民政部、国家统计局:
* [中华人民共和国民政部-中华人民共和国行政区划代码](http://www.mca.gov.cn/article/sj/tjbz/a/)
* [中华人民共和国国家统计局-行政区划代码](http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/)
* [中华人民共和国国家统计局-统计用区划和城乡划分代码](http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/)
* [中华人民共和国国家统计局-统计用区划代码和城乡划分代码编制规则](http://www.stats.gov.cn/tjsj/tjbz/200911/t20091125_8667.html)
* 本项目已更新至:
* [最新县及县以上行政区划代码(截止时间:2016-07-31,发布时间:2017-03-10)](http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html)
* [2016年统计用区划代码和城乡划分代码(截止时间:2016-07-31,发布时间:2017-05-16)](http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/index.html)

## JSON

| 文件列表 | 下载地址 |
|:---------------------------------------------|:---------------|
| 省份数据 | [provinces.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/provinces.json) |
| 城市数据 | [cities.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/cities.json) |
| 区县数据 | [areas.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/areas.json) |
| 乡镇(街道)数据 | [streets.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/streets.json) |
| “省份、城市” 二级联动数据 | [pc.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pc.json) |
| “省份、城市” 二级联动数据(带编码) | [pc-code.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pc-code.json) |
| “省份、城市、区县” 三级联动数据 | [pca.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pca.json) |
| “省份、城市、区县” 三级联动数据(带编码) | [pca-code.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pca-code.json) |
| “省份、城市、区县、乡镇” 四级联动数据 | [pcas.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pcas.json) |
| “省份、城市、区县、乡镇” 四级联动数据(带编码) | [pcas-code.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pcas-code.json) |
## 数据下载

> 提示:需要打包下载全部文件,请看 [Releases](https://github.com/modood/Administrative-divisions-of-China/releases)
| 文件列表 | JSON | CSV |
|:-----------------------------|:-----|:----|
| 省级(省份、直辖市、自治区) | [provinces.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/provinces.json) | [provinces.csv](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/provinces.csv) |
| 地级(城市) | [cities.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/cities.json) | [cities.csv](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/cities.csv) |
| 县级(区县) | [areas.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/areas.json) | [areas.csv](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/areas.csv) |
| 乡级(乡镇、街道) | [streets.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/streets.json) | [streets.csv](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/streets.csv) |
| 村级(村委会、居委会) | [villages.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/villages.json) | [villages.csv](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/villages.csv) |

## Usage
| 文件列表 | 普通 | 带编码 |
|:--------------------------------------------|:-----|:-------|
| “省份、城市” 二级联动数据 | [pc.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pc.json) | [pc-code.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pc-code.json) |
| “省份、城市、区县” 三级联动数据 | [pca.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pca.json) | [pca-code.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pca-code.json) |
| “省份、城市、区县、乡镇” 四级联动数据 | [pcas.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pcas.json) | [pcas-code.json](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pcas-code.json) |
| “省份、城市、区县、乡镇、村庄” 五级联动数据 | - | - |

抓取并导出最新数据
> 提示:需要打包下载全部文件,请看 [Releases](https://github.com/modood/Administrative-divisions-of-China/releases)
```
$ npm install
## 数据更新

$ npm run build
```
$ yarn
$ npm run fetch
```
[1/1] 正在抓取省份、城市和区县数据...
[1/2848] 正在抓取乡镇数据,当前区县: 110105 朝阳区
[2/2848] 正在抓取乡镇数据,当前区县: 110101 东城区
[3/2848] 正在抓取乡镇数据,当前区县: 110106 丰台区
[4/2848] 正在抓取乡镇数据,当前区县: 110109 门头沟区
[5/2848] 正在抓取乡镇数据,当前区县: 110112 通州区
[6/2848] 正在抓取乡镇数据,当前区县: 110102 西城区
[7/2848] 正在抓取乡镇数据,当前区县: 110107 石景山区
[8/2848] 正在抓取乡镇数据,当前区县: 110111 房山区
[9/2848] 正在抓取乡镇数据,当前区县: 110108 海淀区
[10/2848] 正在抓取乡镇数据,当前区县: 110113 顺义区
...
[2841/2848] 正在抓取乡镇数据,当前区县: 659006 铁门关市
[2842/2848] 正在抓取乡镇数据,当前区县: 210522 桓仁满族自治县
[2843/2848] 正在抓取乡镇数据,当前区县: 210881 盖州市
[2844/2848] 正在抓取乡镇数据,当前区县: 130902 新华区
[2845/2848] 正在抓取乡镇数据,当前区县: 150782 牙克石市
[2846/2848] 正在抓取乡镇数据,当前区县: 542421 那曲县
[2847/2848] 正在抓取乡镇数据,当前区县: 610122 蓝田县
[2848/2848] 正在抓取乡镇数据,当前区县: 610322 凤翔县
[1/5] 正在导出 “省份” JSON 数据...
[2/5] 正在导出 “城市” JSON 数据...
[3/5] 正在导出 “区县” JSON 数据...
[4/5] 正在导出 “乡镇” JSON 数据...
[5/5] 数据抓取完成!
[1/4] 正在导出 “省份、城市” 二级联动数据...
[2/4] 正在导出 “省份、城市、区县” 三级联动数据...
[3/4] 正在导出 “省份、城市、区县、乡镇” 四级联动数据...该步骤操作数据较多,比较耗时,请耐心等候...
[4/4] 数据更新完成!
```
[1/1]正在抓取省级数据...
> 提示:
>
> 由于抓取乡镇数据为异步操作,每次输出的乡镇数据顺序可能不同
>
> 但是不会影响其它数据的顺序以及所有数据的完整性。
[1/31]正在抓取地级数据,当前省级:11 北京市
[2/31]正在抓取地级数据,当前省级:12 天津市
[3/31]正在抓取地级数据,当前省级:13 河北省
[4/31]正在抓取地级数据,当前省级:14 山西省
...
[29/31]正在抓取地级数据,当前省级:63 青海省
[30/31]正在抓取地级数据,当前省级:64 宁夏回族自治区
[31/31]正在抓取地级数据,当前省级:65 新疆维吾尔自治区
[1/344]正在抓取县级数据,当前地级:1101 市辖区
[2/344]正在抓取县级数据,当前地级:1201 市辖区
[3/344]正在抓取县级数据,当前地级:1301 石家庄市
[4/344]正在抓取县级数据,当前地级:1302 唐山市
...
[342/344]正在抓取县级数据,当前地级:6542 塔城地区
[343/344]正在抓取县级数据,当前地级:6543 阿勒泰地区
[344/344]正在抓取县级数据,当前地级:6590 自治区直辖县级行政区划
[1/2856]正在抓取乡级数据,当前县级:110101 东城区
[2/2856]正在抓取乡级数据,当前县级:110102 西城区
[3/2856]正在抓取乡级数据,当前县级:110105 朝阳区
[4/2856]正在抓取乡级数据,当前县级:110106 丰台区
...
[2854/2856]正在抓取乡级数据,当前县级:659003 图木舒克市
[2855/2856]正在抓取乡级数据,当前县级:659004 五家渠市
[2856/2856]正在抓取乡级数据,当前县级:659006 铁门关市
[1/42951]正在抓取村级数据,当前乡级:110101001 东华门街道办事处
[2/42951]正在抓取村级数据,当前乡级:110101002 景山街道办事处
[3/42951]正在抓取村级数据,当前乡级:110101003 交道口街道办事处
[4/42951]正在抓取村级数据,当前乡级:110101004 安定门街道办事处
...
[42949/42951]正在抓取村级数据,当前乡级:659004502 兵团一零三团
[42950/42951]正在抓取村级数据,当前乡级:659006100 博古其镇
[42951/42951]正在抓取村级数据,当前乡级:659006101 双丰镇
[100%] 数据抓取完成!
```

## Testing
## 数据校验

```
$ npm test
> eslint . && mocha -t 5000
中华人民共和国行政区划:
✓ 省份数据
✓ 城市数据
✓ 区县数据
✓ 乡镇数据
✓ “一级” 省级(省份、直辖市、自治区)数据
✓ “二级” 地级(城市)数据
✓ “三级” 县级(区县)数据
✓ “四级” 乡级(乡镇、街道)数据
✓ “五级” 村级(村委会、居委会)数据
联动数据
✓ “省份、城市” 二级联动数据
✓ “省份、城市、区县” 三级联动数据
✓ “省份、城市、区县、乡镇” 四级联动数据
✓ “某省、某市、某县、某镇” 不存在
8 passing (12ms)
9 passing (37ms)
```

## 数据库支持

目前本项目抓取的数据保存在 sqlite3,数据文件下载:[sqlite.data](https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/sqlite.data)

可以自己将数据迁移到其他数据库管理系统中(MySQL, Oracle, MSSQL 等)。

**省级数据模型**

```sql
CREATE TABLE IF NOT EXISTS `province` (
`code` VARCHAR(255) PRIMARY KEY,
`name` VARCHAR(255)
);
```

数据预览:

| code | name |
|:-----|:-------|
| 11 | 北京市 |
| 12 | 天津市 |

**地级数据模型**

```sql
CREATE TABLE IF NOT EXISTS `city` (
`code` VARCHAR(255) PRIMARY KEY,
`name` VARCHAR(255),
`provinceCode` VARCHAR(255)
REFERENCES `province` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE
);
```

数据预览:

| code | name | provinceCode |
|:-----|:---------|:-------------|
| 1301 | 石家庄市 | 13 |
| 1302 | 唐山市 | 13 |
| 1303 | 秦皇岛市 | 13 |

**县级数据模型**

```sql
CREATE TABLE IF NOT EXISTS `area` (
`code` VARCHAR(255) PRIMARY KEY,
`name` VARCHAR(255),
`cityCode` VARCHAR(255)
REFERENCES `city` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE,
`provinceCode` VARCHAR(255)
REFERENCES `province` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE
);
```

数据预览:

| code | name | cityCode | provinceCode |
|:-------|:---------|:---------|:-------------|
| 110105 | 朝阳区 | 1101 | 11 |
| 110106 | 丰台区 | 1101 | 11 |
| 110107 | 石景山区 | 1101 | 11 |

**乡级数据模型**

```sql
CREATE TABLE IF NOT EXISTS `street` (
`code` VARCHAR(255) PRIMARY KEY,
`name` VARCHAR(255),
`areaCode` VARCHAR(255)
REFERENCES `area` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE,
`cityCode` VARCHAR(255)
REFERENCES `city` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE,
`provinceCode` VARCHAR(255)
REFERENCES `province` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE
);
```

数据预览:

| code | name | areaCode | cityCode | provinceCode |
|:----------|:-----------------|:---------|:---------|:-------------|
| 110101001 | 东华门街道办事处 | 110101 | 1101 | 11 |
| 110101002 | 景山街道办事处 | 110101 | 1101 | 11 |
| 110101003 | 交道口街道办事处 | 110101 | 1101 | 11 |

**村级数据模型**

```sql
CREATE TABLE IF NOT EXISTS `village` (
`code` VARCHAR(255) PRIMARY KEY,
`name` VARCHAR(255),
`streetCode` VARCHAR(255)
REFERENCES `street` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE,
`areaCode` VARCHAR(255)
REFERENCES `area` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE,
`cityCode` VARCHAR(255)
REFERENCES `city` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE,
`provinceCode` VARCHAR(255)
REFERENCES `province` (`code`)
ON DELETE SET NULL ON UPDATE CASCADE
);
```

数据预览:

| code | name | streetCode | areaCode | cityCode | provinceCode |
|:-------------|:-----------|:-----------|:---------|:---------|:-------------|
| 620723101213 | 新民村委会 | 620723101 | 620723 | 6207 | 62 |
| 620723102201 | 大寨村委会 | 620723102 | 620723 | 6207 | 62 |
| 620723102202 | 长庄村委会 | 620723102 | 620723 | 6207 | 62 |

## Stargazers over time

[![Stargazers over time](https://starcharts.herokuapp.com/modood/Administrative-divisions-of-China.svg)](https://starcharts.herokuapp.com/modood/Administrative-divisions-of-China)
Expand All @@ -115,4 +240,4 @@ $ npm test

## License

this repo is released under the [WTFPL](http://www.wtfpl.net/) – Do What the Fuck You Want to Public License.
This repo is released under the [WTFPL](http://www.wtfpl.net/) – Do What the Fuck You Want to Public License.
Loading

0 comments on commit d346b88

Please sign in to comment.