切换到宽版
  • 2875阅读
  • 2回复

[地名探讨]从地名书写混乱、邮编体系混乱想到的 [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 0 发表于: 2008-01-18
我是一个程序开发人员,最近做的工作和地名、邮政编码、快递公司服务范围等关键字相关。
我碰到的一项功能要求,顾客给出一个收货地址,比如“北京市海淀区中关村南大街9号理工科技大厦2018室XXXX公司”,然后程序根据事先定义好的快递公司送货范围(比如说某快递公司在北京的送货范围说“五环内可以派送”),来判断这个地址是否属于可以送货的范围之内。

如果是人工判断的话,查一下地图可以知道这个地址在五环以内,送货没问题。但现在想实现计算机来判断。那么,我可以选择两个方案:
1)把地址转化成地理坐标,把送货范围也以地理坐标的形式(多边形区域)定义出来,如果前者的坐标处于多边形内部的话OK,否则NG。
2)事先穷举所有可能出现的地名,并将送货范围具体化为“地名A:可送”“地名B:不可送”的表格形式。这样也可以自动查询的到。

虽然第一个方案以图形的方式简化了某些步骤,但经过分析发现,两个方案都需要经过同样的步骤,那就是穷举所有可能出现的地名。

说到顾客书写的收货地址,我想我立马就头大了。同一个地方,不同人写出来的地址只有5%的可能性完全相同。如果放松要求,不要求完全相同,只要求大体相同,估计仍然会有多种地址写法出现。
比如上面的示例地址,不同的人可能会写成不同的样子,咱们举例来看:

北京中关村南大街9号2018室XXXX公司
北京市海淀区理工科技大厦2018室XXXX公司
北京市海淀区中关村南大街9号理工科技大厦2018室XXXX公司 (最完整)
。。。。

加上内部地址就会有更多的不同写法,比如小区内部地址:
XX小区5号楼1单元902室
XX小区5-1-902

学校内部地址:
XX大学办公1号楼招生办公室
XX大学学生宿舍北区5号楼621室
XX大学外语学院252信箱

关于内部地址的混乱,此处放下不表,因为跟上面的议题有些偏题,毕竟一般来说,如果某小区可以送到,就一般不存在说小区内的某几栋楼送、某几栋楼不送的BT局面。

还说外部地址的不同写法问题,如果同一个地方都有这么多的写法,无疑会对我们的地名分析造成很大的阻碍。地名分析计划几乎搁浅了。

我们想到了另一个东西,那就是邮局的邮政编码。我们记忆中,某一个区域会有一个独立的邮政编码,邮局依据邮政编码可以使用自动分拣机,快速分流信件。

可事实上情况更糟,邮政编码的几个问题:

1)分布不均:某些地区邮政编码资源丰富,比如北京(10开头,后面有四位编码空间)。某些地区邮政编码资源稀缺,比如广东东莞(他们只有100个可用编码空间。因此他们居然在6位邮编之外,另设了东莞本地专有编码,可谓无奈的创举)

2)宣传不够、书写混乱:大部分地区对邮编的宣传力度还是不足的,很多人不知道本地区的准确6位数邮编。大多数人在书写邮编时其实只写对了前四位,后两位统一写零,这样白白浪费了两位编码空间,前面四位邮编一般只能精确到地市一级。

3)邮编的分布和行政区划有混乱的地方:我们发现邮编的分布和行政区划不必然重合,跨区县很平常,跨省的邮编也存在。而且分布也出现不少混乱,存在一些邮编在城北地区和城南地区同时使用的情况,在地图上面看位置悬殊很夸张,很奇怪这些邮编是怎么编出来的。

4)各快递公司内部的投递段划分不尽相同,邮政编码的初衷当然是更多的考虑了邮政投递的具体需要,邮政的投递段划分跟各快递公司的划分多有不同的地方。这样,使用同一个邮编的地区里,在快递公司这里就可能出现某些地区可送,某些地区不可送的情况。这第四条很致命。

说到最后,问题又回到原点:地名分析。
只看该作者 1 发表于: 2008-01-18
任何一个计算机程序要实现100%自动化只在理想情况中可行,因此我们不追求100%自动化,我们想实现一个在大多数时候(比如90%以上)都能自动判定的解决方案。

首先我们来分析一下送货范围的定义和地址之间的关系。

在城市之外的农村,完整的地址一般会按照行政区划关系来书写,比如“XX县XX乡(镇)XX村X号”。这样的地址结构属于树形结构,事先准备好数据,判定工作不会很困难。(当然数据的准备工作量是很大的。)

对于农村的送货范围定义,也可以考虑以树型的方式定义。比如:
(1)XX县:a.不配送,b.可配送,c.可配送但不包括子级(即只送城关镇)
(2)XX乡(镇):a.不配送,b.可配送,c.可配送但不包括子级(即只送乡镇政府所在地)
(3)XX村:a.不配送,b.可配送
这样的数据结构可以较好的定义农村区域的送货范围。

目前来说,快递公司的多数业务在城区,农村的快递业务几乎还处于试点阶段,多数县乡村是无法配送的,则直接标记父级节点为a,即可完成整个县或整个乡镇的定义。配置过程并不算复杂,而且对于将来的业务扩展也做好了准备。

对于城市,问题就较为复杂了。城市里地址一般以街道门牌体系来书写,比如先写“中关村南大街9号”,然后写建筑物、小区、校园名称,最后是内部地址(大厦的2018室、小区的5号楼1单元902室、学校里的院系、宿舍楼等)。

城区的送货范围定义方式,我想应该有两种:

一种也按行政区划的体系做树形的数据结构,比如:
(1)XX区:a.不配送,b.可配送
(2)XX街道:a.不配送,b.可配送
(3)XX社区:a.不配送,b.可配送
(根据几个大城市的行政区划情况看,细致到社区层面已经满足需求了。)
树形结构对于城市来说,并不算很适合,城市是快递公司的主营业区域,这样做定义显然比较麻烦。当然这也不失为一个还算说的过去的选择。

另一种,则是更为直观的,结合地图,按照区域分布的定义,比如北京市:
(1)先在地图上沿北五环、东五环、南五环、西五环画出一个封闭多边形,定义该多边形内部为可送范围;
(2)然后如果个别地方无法配送,可以再将该区域画一个封闭多边形,定义该区域为不可送范围;
如果这个个别地方不是很大,也可以结合第一种方案同时使用,附加上XX社区不配送的定义。

这两种方案不管是哪一种定义方式都存在一个共同的问题:

街道是线性的分布,而无论是第一方案中的社区,还是第二方案中的多边形,都是区域的分布。这样就需要将形如“中关村南大街9号”这样的地址,转为“北京理工社区”或者地理坐标。

这样后续问题也不少,比如中关村南大街这条长线分属多个社区,坐标确定对于这条线来说还得区分门牌号。
(其实城市里的门牌号也是个无比头疼的问题,比如门牌号的“知名度”“稳定性”都很差)

但不管怎样,问题还不算彻底没救,还是有了一个不算太坏的解决方案。
[ 此贴被percyboy在2008-01-18 21:02重新编辑 ]
只看该作者 2 发表于: 2008-01-19
东莞有1000个邮号可用。
傻子偷乞丐的钱袋,被瞎子看到了。哑巴大吼一声,把聋子吓了一跳。驼子挺身而出,瘸子飞起一脚。麻子说:“看我的面子就算了吧。”疯子说:“就是,人要有理智!”
快速回复
限100 字节
 
上一个 下一个