Pārlūkot izejas kodu

refactor: 区划代码位数规范化

省级:2 位
地级:4 位
县级:6 位
乡级:9 位

closes #11, closes #15
modood 7 gadi atpakaļ
vecāks
revīzija
cd0bf0f719
11 mainītis faili ar 41 papildinājumiem un 39 dzēšanām
  1. 4 8
      README.md
  2. 0 0
      dist/areas.json
  3. 0 0
      dist/cities.json
  4. 0 0
      dist/pc-code.json
  5. 0 0
      dist/pca-code.json
  6. 0 0
      dist/pcas-code.json
  7. 1 1
      dist/provinces.json
  8. 0 0
      dist/streets.json
  9. 12 6
      scripts/fmt.js
  10. 12 12
      scripts/get.js
  11. 12 12
      test/json.js

+ 4 - 8
README.md

@@ -3,20 +3,16 @@
 [![code style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
 [![dependencies](https://david-dm.org/modood/Administrative-divisions-of-China.svg)](https://david-dm.org/modood/Administrative-divisions-of-China)
 [![npm](https://img.shields.io/npm/v/china-division.svg)](https://www.npmjs.com/package/china-division)
-[![downloads](https://img.shields.io/npm/dt/china-division.svg)](https://www.npmjs.com/package/china-division)
+[![downloads](https://img.shields.io/github/downloads/modood/Administrative-divisions-of-China/total.svg)](https://github.com/modood/Administrative-divisions-of-China/releases)
 [![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.mca.gov.cn/article/sj/tjbz/a/)
     * [中华人民共和国国家统计局-统计用区划和城乡划分代码](http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/)
-*   标准:
-    * [中华人民共和国行政区划](https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%92)
-    * [中华人民共和国行政区划代码](https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%92%E4%BB%A3%E7%A0%81)
-    * [中华人民共和国公民身份号码](https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%85%AC%E6%B0%91%E8%BA%AB%E4%BB%BD%E5%8F%B7%E7%A0%81)
-    * [统计用区划代码和城乡划分代码编制规则](http://www.stats.gov.cn/tjsj/tjbz/200911/t20091125_8667.html)
+    * [中华人民共和国国家统计局-统计用区划代码和城乡划分代码编制规则](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)

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/areas.json


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/cities.json


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/pc-code.json


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/pca-code.json


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/pcas-code.json


+ 1 - 1
dist/provinces.json

@@ -1 +1 @@
-[{"code":"110000","name":"北京市"},{"code":"120000","name":"天津市"},{"code":"130000","name":"河北省"},{"code":"140000","name":"山西省"},{"code":"150000","name":"内蒙古自治区"},{"code":"210000","name":"辽宁省"},{"code":"220000","name":"吉林省"},{"code":"230000","name":"黑龙江省"},{"code":"310000","name":"上海市"},{"code":"320000","name":"江苏省"},{"code":"330000","name":"浙江省"},{"code":"340000","name":"安徽省"},{"code":"350000","name":"福建省"},{"code":"360000","name":"江西省"},{"code":"370000","name":"山东省"},{"code":"410000","name":"河南省"},{"code":"420000","name":"湖北省"},{"code":"430000","name":"湖南省"},{"code":"440000","name":"广东省"},{"code":"450000","name":"广西壮族自治区"},{"code":"460000","name":"海南省"},{"code":"500000","name":"重庆市"},{"code":"510000","name":"四川省"},{"code":"520000","name":"贵州省"},{"code":"530000","name":"云南省"},{"code":"540000","name":"西藏自治区"},{"code":"610000","name":"陕西省"},{"code":"620000","name":"甘肃省"},{"code":"630000","name":"青海省"},{"code":"640000","name":"宁夏回族自治区"},{"code":"650000","name":"新疆维吾尔自治区"},{"code":"710000","name":"台湾省"},{"code":"810000","name":"香港特别行政区"},{"code":"820000","name":"澳门特别行政区"}]
+[{"code":"11","name":"北京市"},{"code":"12","name":"天津市"},{"code":"13","name":"河北省"},{"code":"14","name":"山西省"},{"code":"15","name":"内蒙古自治区"},{"code":"21","name":"辽宁省"},{"code":"22","name":"吉林省"},{"code":"23","name":"黑龙江省"},{"code":"31","name":"上海市"},{"code":"32","name":"江苏省"},{"code":"33","name":"浙江省"},{"code":"34","name":"安徽省"},{"code":"35","name":"福建省"},{"code":"36","name":"江西省"},{"code":"37","name":"山东省"},{"code":"41","name":"河南省"},{"code":"42","name":"湖北省"},{"code":"43","name":"湖南省"},{"code":"44","name":"广东省"},{"code":"45","name":"广西壮族自治区"},{"code":"46","name":"海南省"},{"code":"50","name":"重庆市"},{"code":"51","name":"四川省"},{"code":"52","name":"贵州省"},{"code":"53","name":"云南省"},{"code":"54","name":"西藏自治区"},{"code":"61","name":"陕西省"},{"code":"62","name":"甘肃省"},{"code":"63","name":"青海省"},{"code":"64","name":"宁夏回族自治区"},{"code":"65","name":"新疆维吾尔自治区"},{"code":"71","name":"台湾省"},{"code":"81","name":"香港特别行政区"},{"code":"82","name":"澳门特别行政区"}]

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/streets.json


+ 12 - 6
scripts/fmt.js

@@ -67,7 +67,7 @@ function getAddressPCA (provinces, cities, areas, streets) {
   // 特殊城市处理,中山市、东莞市、儋州市和嘉峪关市没有第三级(区县),
   // 嘉峪关市有第三级,但是有且只有一个(市辖区:620201),
   // 出于实用性考虑,使用第四级(乡镇街道)补进
-  const f = ['441900', '442000', '460400', '620200']
+  const f = ['4419', '4420', '4604', '6202']
 
   _.forEach(rC, p => {
     r[p.name] = {}
@@ -76,12 +76,18 @@ function getAddressPCA (provinces, cities, areas, streets) {
       c => delete c.parent_code && c
     )
     _.forEach(p.childs, c => {
-      const it = _.includes(f, c.code) ? _.cloneDeep(streets) : _.cloneDeep(areas)
+      let it
+      if (_.includes(f, c.code)) {
+        // 嘉峪关市比较特殊,二级(嘉峪关市:6202)三级只有一个(市辖区:620201),
+        // 因此用第四级数据补进第三级的话,需要处理一下
+        c.code = c.code === '6202' ? '620201' : `${c.code}00`
+        it = _.cloneDeep(streets)
+      } else {
+        it = _.cloneDeep(areas)
+      }
 
       c.childs = _.map(
-        // 嘉峪关市比较特殊,二级(嘉峪关市:620200)三级只有一个(市辖区:620201),
-        // 因此用第四级数据补进第三级的话,需要处理一下
-        _.filter(it, i => (c.code === '620200' ? '620201' : c.code) === i.parent_code),
+        _.filter(it, i => c.code === i.parent_code),
         i => delete i.parent_code && i
       )
       r[p.name][c.name] = _.map(c.childs, i => i.name)
@@ -116,7 +122,7 @@ function getAddressPCAS (provinces, cities, areas, streets) {
         // 特殊区县单独处理,福建省泉州市金门县没有第四级(乡镇),
         // 出于实用性考虑,使用一个第三级(区县)替代
         if (a.code === '350527') {
-          a.childs = [{ name: '金门县', code: '350527000000' }]
+          a.childs = [{ name: '金门县', code: '350527000' }]
           r[p.name][c.name][a.name] = ['金门县']
           return
         }

+ 12 - 12
scripts/get.js

@@ -143,22 +143,22 @@ function pick (callback) {
       if (k.substr(2, 4) === '0000') {
         // 省份数据
         provinces.push({
-          code: k,
+          code: k.substr(0, 2),
           name: data[k]
         })
       } else if (k.substr(4, 2) === '00' && k.substr(2, 4) !== '0000') {
         // 城市数据
         cities.push({
-          code: k,
+          code: k.substr(0, 4),
           name: data[k],
-          parent_code: k.substr(0, 2) + '0000'
+          parent_code: k.substr(0, 2)
         })
       } else if (k.substr(4, 2) !== '00' && data[k] !== '市辖区') {
         // 区县数据
         areas.push({
           code: k,
           name: data[k],
-          parent_code: k.substr(0, 4) + '00'
+          parent_code: k.substr(0, 4)
         })
       }
     }
@@ -187,7 +187,7 @@ function pickStreets (areas, callback) {
       for (const k in data) {
         // 乡镇数据
         streets.push({
-          code: k,
+          code: k.substr(0, 9),
           name: data[k],
           parent_code: k.substr(0, 6)
         })
@@ -213,13 +213,13 @@ function handleSpecialCities (callback) {
   //    没有,因此需要手动加上。
   // 4. 福建省泉州市金门县没有乡镇级行政区划
   const areas = [
-    { code: '442000', name: '中山市', parent_code: '442000' },
-    { code: '441900', name: '东莞市', parent_code: '441900' },
-    { code: '460400', name: '儋州市', parent_code: '460400' },
-    { code: '620201', name: '嘉峪关市', parent_code: '620200' },
-    { code: '460321', name: '西沙群岛', parent_code: '460300' },
-    { code: '460322', name: '南沙群岛', parent_code: '460300' },
-    { code: '460323', name: '中沙群岛的岛礁及其海域', parent_code: '460300' }
+    { code: '442000', name: '中山市', parent_code: '4420' },
+    { code: '441900', name: '东莞市', parent_code: '4419' },
+    { code: '460400', name: '儋州市', parent_code: '4604' },
+    { code: '620201', name: '嘉峪关市', parent_code: '6202' },
+    { code: '460321', name: '西沙群岛', parent_code: '4603' },
+    { code: '460322', name: '南沙群岛', parent_code: '4603' },
+    { code: '460323', name: '中沙群岛的岛礁及其海域', parent_code: '4603' }
   ]
   const streets = []
 

+ 12 - 12
test/json.js

@@ -22,27 +22,27 @@ const pcasC = chinaDivision.pcasC
 
 describe('中华人民共和国行政区划:', () => {
   it('省份数据', () => {
-    const i = findElem(provinces, 'code', '110000')
+    const i = findElem(provinces, 'code', '11')
     assert(i !== -1)
     assert.equal(provinces[i].name, '北京市')
   })
 
   it('城市数据', () => {
-    const i = findElem(cities, 'code', '140100')
+    const i = findElem(cities, 'code', '1401')
     assert(i !== -1)
     assert.equal(cities[i].name, '太原市')
-    assert.equal(cities[i].parent_code, '140000')
+    assert.equal(cities[i].parent_code, '14')
   })
 
   it('区县数据', () => {
     const i = findElem(areas, 'code', '120110')
     assert(i !== -1)
     assert.equal(areas[i].name, '东丽区')
-    assert.equal(areas[i].parent_code, '120100')
+    assert.equal(areas[i].parent_code, '1201')
   })
 
   it('乡镇数据', () => {
-    const i = findElem(streets, 'code', '441881124000')
+    const i = findElem(streets, 'code', '441881124')
     assert(i !== -1)
     assert.equal(streets[i].name, '波罗镇')
     assert.equal(streets[i].parent_code, '441881')
@@ -58,8 +58,8 @@ describe('中华人民共和国行政区划:', () => {
 
     let ok = false
     const t = [
-      { code: '130000', name: '河北省' },
-      { code: '130300', name: '秦皇岛市' }
+      { code: '13', name: '河北省' },
+      { code: '1303', name: '秦皇岛市' }
     ]
     loop:
     for (let i = 0; i < pcC.length; i++) {
@@ -97,8 +97,8 @@ describe('中华人民共和国行政区划:', () => {
 
     let ok = false
     const t = [
-      { code: '140000', name: '山西省' },
-      { code: '140500', name: '晋城市' },
+      { code: '14', name: '山西省' },
+      { code: '1405', name: '晋城市' },
       { code: '140524', name: '陵川县' }
     ]
     loop:
@@ -145,10 +145,10 @@ describe('中华人民共和国行政区划:', () => {
 
     let ok = false
     const t = [
-      { code: '210000', name: '辽宁省' },
-      { code: '210200', name: '大连市' },
+      { code: '21', name: '辽宁省' },
+      { code: '2102', name: '大连市' },
       { code: '210211', name: '甘井子区' },
-      { code: '210211007000', name: '泡崖街道' }
+      { code: '210211007', name: '泡崖街道' }
     ]
 
     loop:

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels