format.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. 'use strict'
  2. const fs = require('fs')
  3. const path = require('path')
  4. const getPath = function (dir) {
  5. return path.join(__dirname, dir)
  6. }
  7. let intentMap = {
  8. '2': [6, 7, 8],
  9. '3': [5, 10, 7],
  10. '4': [5, 10, 7]
  11. }
  12. // build(2)
  13. // build(3)
  14. build(4)
  15. function build (version) {
  16. const datas = fs.readFileSync(getPath(`../v${version}/data.v${version}.txt`), 'utf-8')
  17. const list = datas.split('\n')
  18. let rs = {
  19. 86: {}
  20. }
  21. let province = []
  22. let city = []
  23. let cities = {}
  24. list.forEach((one, index) => {
  25. let list = one.split(' ').filter(one => {
  26. return one
  27. }).map(one => {
  28. return one.replace(/\s+/g, '')
  29. })
  30. list[0] = list[0] * 1
  31. let provinceReg = new RegExp(`\\d\\s{${intentMap[version][0]}}\\S`)
  32. if (provinceReg.test(one)) {
  33. // 省
  34. rs['86'][list[0]] = list[1]
  35. province = [list[0], list[1]]
  36. }
  37. let cityReg = new RegExp(`\\d\\s{${intentMap[version][1]}}\\S`)
  38. if (cityReg.test(one)) {
  39. // 市
  40. if (list[1] === '市辖区') {
  41. list[1] = '市辖区'
  42. }
  43. // if (list[1] !== '县') {
  44. city = [list[0], list[1]]
  45. if (!rs[province[0]]) {
  46. rs[province[0]] = {}
  47. }
  48. rs[province[0]][list[0]] = list[1]
  49. // }
  50. if (!cities[list[0]]) {
  51. cities[list[0]] = {
  52. name: list[1],
  53. number: 0
  54. }
  55. } else {
  56. }
  57. }
  58. let districReg = new RegExp(`\\d\\s{${intentMap[version][2]}}\\S`)
  59. if (districReg.test(one)) {
  60. // 区
  61. if (list[1] !== '市辖区') {
  62. if (!rs[city[0]]) {
  63. rs[city[0]] = {}
  64. }
  65. if (city[1] === '省直辖县级行政区划' || city[1] === '自治区直辖县级行政区划') { // 直辖县直接转为市
  66. rs[province[0]][list[0]] = list[1]
  67. cities[list[0]] = {
  68. name: list[1],
  69. number: 0
  70. }
  71. } else {
  72. rs[city[0]][list[0]] = list[1]
  73. cities[city[0]] && cities[city[0]].number++
  74. }
  75. }
  76. }
  77. })
  78. // 删除省直辖县级行政区划
  79. for (let i in rs) {
  80. for (let j in rs[i]) {
  81. if (rs[i][j] === '省直辖县级行政区划' || rs[i][j] === '自治区直辖县级行政区划') {
  82. delete rs[i][j]
  83. }
  84. }
  85. if (!Object.keys(rs[i]).length) {
  86. delete rs[i]
  87. }
  88. }
  89. // 其他地区暂不更新
  90. const special = {
  91. "810000": {
  92. "810001": "中西區",
  93. "810002": "灣仔區",
  94. "810003": "東區",
  95. "810004": "南區",
  96. "810005": "油尖旺區",
  97. "810006": "深水埗區",
  98. "810007": "九龍城區",
  99. "810008": "黃大仙區",
  100. "810009": "觀塘區",
  101. "810010": "荃灣區",
  102. "810011": "屯門區",
  103. "810012": "元朗區",
  104. "810013": "北區",
  105. "810014": "大埔區",
  106. "810015": "西貢區",
  107. "810016": "沙田區",
  108. "810017": "葵青區",
  109. "810018": "離島區"
  110. },
  111. "820000": {
  112. "820001": "花地瑪堂區",
  113. "820002": "花王堂區",
  114. "820003": "望德堂區",
  115. "820004": "大堂區",
  116. "820005": "風順堂區",
  117. "820006": "嘉模堂區",
  118. "820007": "路氹填海區",
  119. "820008": "聖方濟各堂區"
  120. }
  121. }
  122. rs = Object.assign(rs, special)
  123. require('fs').writeFileSync(getPath('../data.json'), JSON.stringify(rs, null, 2))
  124. require('fs').writeFileSync(getPath(`../v${version}/data.json`), JSON.stringify(rs, null, 2))
  125. require('fs').writeFileSync(getPath('../data.js'), 'module.exports = ' + JSON.stringify(rs, null, 2))
  126. require('fs').writeFileSync(getPath(`../v${version}/data.js`), 'module.exports = ' + JSON.stringify(rs, null, 2))
  127. let citiesId = []
  128. for (let i in cities) {
  129. if (cities[i].number > 0) {
  130. delete cities[i]
  131. } else {
  132. citiesId.push(i)
  133. }
  134. }
  135. require('fs').writeFileSync(`./v${version}/only_2_level_city_id.json`, JSON.stringify(citiesId))
  136. }