Gem 最近项目里需要用到城市数据,遂写了个 Gem 用来取得最新数据。

wongyouth · 2014年06月30日 · 最后由 bastengao 回复于 2014年07月01日 · 4470 次阅读

最近项目里需要用到中国城市数据,看了几个 Gem,发现数据都不是最新的,遂写了个 Gem chinacity 用来从国家统计局取最新数据。

因为考虑到城市类基础数据一旦开始使用,id 与别的数据关联后就比较难再更新数据了,所以就做成只取数据生成文件的简单小工具。

功能

  • 从国家统计局官网取最新数据。
  • 支持导出 JSON,CSV 格式
  • JSON 数据 兼容 china_city Gem 的数据格式
  • 支持同时导出拼音缩写

用法

导出 JSON 格式

$ chinacity > areas.json

The result looks like

{
  "province": [
    {
      "id": "110000",
      "text": "北京市"
    },
    {
      "id": "120000",
      "text": "天津市"
    },
    ...
  ],

  "city": [
    {
      "id": "110100",
      "text": "市辖区"
    },
    {
      "id": "110200",
      "text": "县"
    },
    ...
  ],
  "district": [
    {
      "id": "110101",
      "text": "东城区"
    },
    {
      "id": "110102",
      "text": "西城区"
    },
    ...
  ]

导出 JSON 格式,同时输出拼音缩写。

$ chinacity -s > areas.json

The Result json looks like

{
  "province": [
    {
      "id": "110000",
      "text": "北京市",
      "short": "BJS"
    },
    {
      "id": "120000",
      "text": "天津市",
      "short": "TJS"
    },
    {
      "id": "130000",
      "text": "河北省",
      "short": "HBS"
    },
    ...
  ],
  "city": [...],
  "district": [...]
}

导出 CSV 格式。

$ chinacity -sc > areas.csv

The result looks like

id, 名称, 缩写, 层级
110000, 北京市, BJS, 1
110100, 市辖区, SXQ, 2
110101, 东城区, DCQ, 3
110102, 西城区, XCQ, 3
110105, 朝阳区, ZYQ, 3
...

chinacity 主页链接 http://github.com/wongyouth/chinacity

不知道如果某县变成某市的区的时候,数据方面如何处理

是不是历史数据就还得显示之前的数据,而新登录的数据用新的

@ywjno 我觉得要看你的数据如何建模的。

如果你的数据是导入到数据库,应该会用数据库的 id 来建立层级关系。 这样如果某县变成某市的区,只要改变层级父子关系就好了。如果某个县市合并了,需要把所有引用的旧 id 变更到新 id 上。

一般一个县市数据即使变更了,使用旧的地址邮递系统应该都能够辨识出来,不是特别有要求的系统我觉得 5 年之内没有必要考虑更新的问题,至于 5 年之后可能系统都重写或者换掉了也不一定哈。~。~

#2 楼 @wongyouth 感谢回复,提供的方案很有启发

需要 登录 后方可回复, 如果你还没有账号请 注册新账号