Bigkoo / Android-PickerView

This is a picker view for android , support linkage effect, timepicker and optionspicker.(时间选择器、省市区三级联动)
Apache License 2.0
13.42k stars 3.44k forks source link

更新 province.json 的操作方法,获取到最新版的省市区数据 #1030

Open xiangyuecn opened 1 year ago

xiangyuecn commented 1 year ago

鉴于 assets/province.json 于2017年之后就没有更新,导致选择器的行政区划数据过于滞后,很多新的区县都没有。每年都会有十几到几十个区县撤并,因此行政区划数据应当需要经常更新维护。

可以到我的开源库:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov 获取到最新的省市区数据,基本上月更,除了省市区乡镇四级区划外,还有坐标边界数据。

转成 province.json ,请用下面方法(使用时,建议开发当天转换得到新文件,这样就能使用到最新版本数据):

  1. 打开在线多级联动生成页面:https://xiangyuecn.gitee.io/areacity-jsspider-statsgov/
  2. 拖动页面到最底下,在“导出为自定义按钮”上方的输入框中填写下面的自定义js代码
  3. 点击“导出为自定义按钮”,就得到了含最新数据的 province.json 文件

注意:生成的文件带了UTF8的BOM头,可以把文件打开后,复制一下文本到新的文件里面,去掉BOM头,免得对json解析产生影响

自定义js代码:

//复制这些代码到 “导出为自定义按钮” 上方的输入框中
function UserFormat(list,mapping){
    var exec=function(level,obj,dist){//写个函数,递归处理数据
        if(!obj.childs.length){
            return;
        };
        for(var i=0;i<obj.childs.length;i++){
            var itm=obj.childs[i];
            var o={ name:itm.ext_name };
            var arr=[];
            if(level==3){
                dist.push(itm.ext_name);
                continue;
            }
            if(level==1)o.city=arr;
            if(level==2)o.area=arr;
            dist.push(o);

            exec(level+1, itm, arr);
        };
        return dist;
    };
    var data=exec(1,mapping[0],[]);

    var code=JSON.stringify(data,null,"  ");
    var codeLen=new Blob([code],{"type":"text/plain"}).size+3;

    return Result("",code,"province.json",codeLen+"字节");
}