C#根据地址信息,自动获取该地址对应的行政区域编码

C#根据地址信息,自动获取该地址对应的行政区域编码

C#源码:GetCityId方法实现

C# 全选
        /// <summary>
        /// 根据地址信息,自动获取行政区域编码
        /// </summary>
        /// <param name="data">城市编码数据库,dt_city表</param>
        /// <param name="address">地址信息</param>
        /// <param name="cityIDs">输出3个城市编码,调号隔开</param>
        /// <param name="cityNames">输出3个城市名称,调号隔开</param>
        /// <returns></returns>
        public bool GetCityId(DataTable data, string address, ref string cityIDs, ref string cityNames)
        {
            const int MAX_CITYS = 4;

            //内置函数:获取区域上级编号
            string GetParent(string cityCode)
            {
                var rs = data.Select($"code='{cityCode}'");
                if (rs.Length > 0)
                    return rs[0]["parent_id"].ToString();
                else
                    return "";
            }

            //内置函数:获取省市名称
            string GetCityName(List<string> codeList)
            {
                StringBuilder sb = new StringBuilder();
                foreach (var s in codeList)
                {
                    var rs = data.Select($"code='{s}'");
                    if (rs.Length > 0)
                        sb.Append(rs[0]["name"].ToString() + ",");
                }
                return sb.ToString();
            }

            List<String> ids = new List<string>();

            //分解地址            
            var list = address.Split(new char[] { '/', ' ' }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray();

            //有规则,有分隔符号,如:上海市/上海市/松江区 松卫北路6700弄沪松五金建材市场3幢1*****
            if (list.Length > 1)
            {
                DataRow[] rs;
                foreach (var item in list)
                {
                    rs = data.Select($"name='{item}'");
                    if (rs.Length > 0)
                    {
                        ids.Add(rs[0]["code"].ToString());
                        ids.Add(rs[0]["parent_id"].ToString());
                        ids.Add(GetParent(rs[0]["parent_id"].ToString()));
                    }
                }
            }
            else //没有分隔符,如:江苏省昆山市振石路xxx房间
            {
                //枚举城市名称,匹配地址
                foreach (DataRow R in data.Rows)
                {
                    if (address.IndexOf(R["name"].ToString()) >= 0)
                    {
                        ids.Add(R["code"].ToString());
                        ids.Add(R["parent_id"].ToString());
                        ids.Add(GetParent(R["parent_id"].ToString()));
                    }
                }
            }

            var result = ids.Distinct().OrderBy(x => x).ToList<String>();
            result.Remove("100000");//删除根节点
            result.Remove("");//删除空元素
            result = result.Take<String>(MAX_CITYS).ToList<String>();

            //返回结果
            cityIDs = result.Count == 0 ? "," : String.Join(",", result);
            cityNames = GetCityName(result);

            return result.Count > 0;

        }

 

测试案例

C# 全选
  static void Main(string[] args)
        {
            //获取城市数据
            var dt = new SyncHelper().GetCityData();

            string ids = "";
            string names = "";

            //测试案例
            var s1 = new SyncHelper().GetCityId(dt, "上海市/上海市/松江区 松卫北路6700弄沪松五金建材市场3幢1*****", ref ids, ref names);
            Console.WriteLine(ids + "   " + names);
            var s2 = new SyncHelper().GetCityId(dt, "蔡灵波    上海市/黄浦区/南京东路街道 湖滨路150号企业天地5号楼B*****", ref ids, ref names);
            Console.WriteLine(ids + "   " + names);
            var s3 = new SyncHelper().GetCityId(dt, "江苏省昆山市振石路与*****", ref ids, ref names);
            Console.WriteLine(ids + "   " + names);
            var s4 = new SyncHelper().GetCityId(dt, "上海住豪建筑 上海市/青浦区 青浦区徐泾镇龙联*****", ref ids, ref names);
            Console.WriteLine(ids + "   " + names);
            var s5 = new SyncHelper().GetCityId(dt, "绍兴市隐山府项目部(杨绍线与山阴*****", ref ids, ref names);
            Console.WriteLine(ids + "   " + names);
            var s6 = new SyncHelper().GetCityId(dt, "张家港市塘桥镇南环路阳地钢工地(58号银达*****", ref ids, ref names);
            Console.WriteLine(ids + "   " + names);
            Console.ReadKey();

        }

测试结果

根据地址信息,自动获取该地址对应的行政区域编码

 

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:本地文件日志,LocalLog.cs
下一篇:更换工具栏的按钮图标,修改Toolbar按钮图标
评论列表

发表评论

评论内容
昵称:
关联文章

C#根据地址信息自动获取地址对应行政区域编码
C#根据第三方提供IP查询服务获取公网外网IP地址
C#获取文本文件编码格式Encoding,自动区分GB2312和UTF8
百度地图API应用 - 根据地址查询经纬度
C#获取本地IP地址
2022年最新:中国行政区域编码数据表,省市区编号xls文件下载
C# 获取宽带连接(PPPOE拨号)IP地址
C#获取文件编码格式(UTF-8/UNICODE/ASCII)
C#根据字节数据byte[]前2位判断文本文件Encoding编码格式
由于内部错误,服务器无法处理请求。有关错误详细信息,请打开服务器上 IncludeExceptionDetailInFaults
C# NavBarControl根据鼠标点击位置获取 NavBarGroup 对象
ASP.NET通过HttpContext获取IP地址
从HttpRequestMessage对象获取IP地址
解决方案:WCF客户端无法获取服务端抛出异常详细信息
C# 从html中通过正则找到IP地址信息(只支持ipv4地址)
解决frmMain窗体Dock组件根据NavBarControl自动同步缩放
C# Winform中如何获取父窗体中控件信息
图片转为Base64编码文本
sp_sys_GetTableFieldNames 获取资料表字段备注信息
C# get和set访问器:获取和设置字段(属性)