gzu-liyujiang / AndroidPicker

安卓选择器类库,包括日期及时间选择器(可用于出生日期、营业时间等)、单项选择器(可用于性别、民族、职业、学历、星座等)、二三级联动选择器(可用于车牌号、基金定投日期等)、城市地址选择器(分省级、地市级及区县级)、数字选择器(可用于年龄、身高、体重、温度等)、日历选日期择器(可用于酒店及机票预定日期)、颜色选择器、文件及目录选择器、图片选择器等……WheelPicker/DatePicker/TimePicker/OptionPicker/NumberPicker/LinkagePicker/AddressPicker/CarPlatePicker/CalendarPicker/ColorPicker/FilePicker/ImagePicker etc.
Other
6.51k stars 1.47k forks source link

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

Open xiangyuecn opened 1 year ago

xiangyuecn commented 1 year ago

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

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

对于 省直辖县级市 比如:湖北的仙桃、潜江,海南的琼海、五指山,直筒子市:广东中山、东莞,海南儋州等,这两种会少一级数据,导致很未处理此问题的级联选择器产生各种bug;我的开源库对于上述两种城市有专门特殊处理,比如:湖北-潜江-龙湾镇,将填充一个同名的区级,变成 湖北-潜江-潜江-龙湾镇。

注意:code为区划代码简化后的数字,省级为2位数,市级为4位数(县级市、直筒子市为6位),区县级为6位数(县级市、直筒子市的为9位),此code是唯一的。

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

  1. 打开在线多级联动生成页面:https://xiangyuecn.gitee.io/areacity-jsspider-statsgov/
  2. 拖动页面到最底下,在“导出为自定义按钮”上方的输入框中填写下面的自定义js代码
  3. 点击“导出为自定义按钮”,就得到了含最新数据的 china_address.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={ code:itm.id+"", name:itm.ext_name };
            if(level==3){
                dist.push(o);
                continue;
            }
            var arr=[];
            if(level==1)o.cityList=arr;
            if(level==2)o.areaList=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,"china_address.json",codeLen+"字节");
}
liyujiang-gzu commented 1 year ago

已发布 4.1.12 版本