/** * 生成全国县级行政区划快照:node scripts/gen-china-districts.js * 数据源:devDependency @province-city-china/data(GB/T 2260,省市区四级全量) * 输出:src/enumerate/chinaDistricts.json,仅保留县级约 3300 条([code, 名称, 省+市],160KB 左右) * 行政区划调整后重新执行本脚本即可刷新快照 */ const fs = require("fs"); const path = require("path"); const all = require("@province-city-china/data"); /** 省级名称表:code 形如 XX0000 */ const provinceNameByCode = {}; /** 地级名称表:code 形如 XXYY00 */ const cityNameByCode = {}; all.forEach((item) => { const isProvince = item.city === 0 && item.area === 0 && item.town === 0; const isCity = item.city !== 0 && item.area === 0 && item.town === 0; if (isProvince) provinceNameByCode[item.province] = item.name; if (isCity) cityNameByCode[item.province + item.city] = item.name; }); const districts = all .filter((item) => item.city !== 0 && item.area !== 0 && item.town === 0) .map((item) => { const province = provinceNameByCode[item.province] || ""; const city = cityNameByCode[item.province + item.city] || ""; // 直辖市等省市同名时不重复拼接 const region = city && city !== province ? `${province}${city}` : province; return [item.code, item.name, region]; }); const outFile = path.join(__dirname, "../src/enumerate/chinaDistricts.json"); fs.writeFileSync(outFile, `${JSON.stringify(districts)}\n`, "utf8"); console.log(`已生成 ${path.relative(process.cwd(), outFile)}:${districts.length} 条`);