GEOMATICS&SPATIALINFORMATION TECHNOLOGY Vol.30,No.3 Jun., 2007 收稿日期:2006- 09- 04
作者简介:章意锋(1980-),男,浙江宁波人,华东师范大学地图学与地理信息系统专业在读研究生,研究方向为地理信息系统的研 究与开发。 ArcGIS中地理编码方法的改进 章意锋1,吴健平1,程 怡2,曾春润1 (1.华东师范大学地理信息科学教育部重点实验室,上海200062; 2.华东师范大学城市与区域经济系,上海200062)
摘要:城市管理部门对空间数据与非空间数据共享整合的要求日益迫切,急需利用地理编码技术把空间数据 和非空间数据联系起来。但是由于中国的地名、地址体系异常复杂等原因的存在,使得地理编码技术没有国外 成熟,应用也没有国外广泛。针对上述问题,笔者提出了解决ArcGIS中组合定位器不支持中文等问题的一种解 决方案,并且通过应用于上海市青少年管理系统,提出了关于如何提高地址匹配成功率的几点建议。
关键词: 地理编码;地址定位器;参考主题
中图分类号:P208 文献标识码:B 文章编号:1672- 5867(2007)03- 0116- 04 0引 言
随着GIS在我国城市信息化建设中越来越广泛的 应用,城市管理部门对空间数据与非空间数据共享整合 的要求日益迫切。据专家分析,政府各职能部门拥有的 大量业务信息中,80%的信息都与地理空间位置密切相 关,但遗憾的是这些信息几乎都没有空间坐标,因此无 法与其他信息整合,无法实现可视化的空间分
析[1]。为 了将这些空间信息与非空间信息、非空间信息与非空间 信息进行集成与融合,真正为公众提供直观、生动的基 于空间位置的服务,需要建立空间与非空间信息之间的 联系,而地理编码正是建立这两者之间联系的最重要、 最实用的手段。
1 ArcGIS中的地理编码
1.1 地理编码
地理编码又称地址匹配,是在含地址的表格数据与 相关主题之间建立联系,并为表格数据创建一个相应的 点图层,即对表格数据进行空间定位[2]。 地理编码的过程是先对含地址的每个记录和带有 地址属性的要素主题(参考主题)进行比较,如果找到 匹配,参考主题上的地理坐标就被分配给相应的记录,这样,一个纯粹的只具有地址信息的表格数据文件就可 以同时具有地理坐标信息,从而可以在地理信息系统中 作为地图显示并进行进一步的分析。
1.2 ArcGIS中的地理编码
目前常用的GIS软件都具备地理编码功能,如Arc- GIS的Geocoding和MapInfo的MapMarker等,并且地理 编码方式基本相同。在ArcGIS中地理编码前,首先要 确定一个参考主题,并建立地理编码索引。地理编码索 引是根据编码所用的地址类型确定反映地址信息的相 关字段,如选择USStreets则需要确定反映右起始门牌、 左起始门牌、右终止门牌、左终止门牌以及路名的字段, ArcGIS中以地址定位器的方式来表现地理编码索引。 建立地理编码索引后,就可以对包含地址的数据表格进 行地理编码[3]。
在ArcGIS中内置了很多常用的地址定位器,这些 地址定位器根据参考主题的不同可以分成两种类型:基 于道路的定位器和基于地块的定位器。基于道路
的定 位器通过道路名和门牌号码实现地址定位,在参考主题 中每一个路段都具有道路名和起止门牌号码信息,在地 理编码时,首先根据地址信息中的道路名找到参考主题 中的相同名称路段(一般情况下有多个路段),然后根 据地址信息中的门牌号及每个路段的起止门牌号码信 息找到门牌号所在路段,最后根据门牌号及该路段的起 止门牌号码信息进行内插确定该记录在该路段上的位 置。基于地块的定位器是通过标识地块惟一性的信息 进行地址定位的,在参考主题中每一地块都具有惟一的 标识信息,这里的地块可以是行政区、邮政编码区、街坊 等,根据地址中的标识信息,查找参考主题中具有相同 标识的记录(地块),并定位到该地块中。常用的地址 定位器见表1。
表1 ArcGIS内置的常用地址定位器[4]
2 ArcGIS中组合地址定位器存在的问题及解决方法 2.1 国外的软件不完全适合中国
美国是地理编码应用最早、最广泛的国家,早在20 世纪70年代就建立了全国的地理编码标准,并开发了 通用的地理编码软件工具,成功地应用于TIGER软件 系统,在历次全国人口普查统计中发挥了巨大作用。虽 然国外地址编码技术已经很成熟,有了成型的应用产 品,但无论是TIGER软件系统,还是MapInfo公司开发 的MapMarker,或是ESRI公司的Geocoding都不是十分 适合中国的国情。 我们不能直接使用国外开发的这些成熟的地理编 码软件的主要原因有: 1)中国现有的地名、地址体系异常复杂,地名混乱、 无序,缺乏规律性和统一的标准; 2)国外特别是美国公司的产品都是根据美国街道、 街区的特色开发出来适合美国的地址匹配技术,而且这 些公司开发的地理编码软件中附带大量美国的地址数 据库和地图; 3)国外的软件一般对英文的支持很好,但是对中文 的支持有时
会不尽如人意,有些功能需要打补丁才能支 持中文。
2.2 ArcGIS中地址定位器存在的问题
ArcGIS虽然内置了很多地址定位器,而且其中一些 地址定位器的地址模型也基本能符合国内地址定位的 要求,但是能够把这些零散的地址定位器组合到一起的 组合定位器却不能支持中文。 假如需要建立一个地址定位模型,其中需要实现两 种类型地址信息的定位,一种是街道+门牌号,另一种 117第3期章意锋等:ArcGIS中地理编码方法的改进是小区名。据此首先根据街道主题能够提供的信息创 建一个类型是USStreets的地址定位器,然后根据小区 主题创建一个类型是SingleField的地址定位器。这样 就可以分别使用这两个定位器,来定位这两种类型的地 址,但是当两个定位器合在一起创建组合定位器的时 候,我们发现不管输入什么地址,定位器给出的结果都 是不能匹配的。 但是综合使用多种定位器是提高地址匹配准确性 的策略之一[5],而且在实际使用中一个地区的地址很少 能够用一种形式的定位器全部涵盖。有两种方法来解 决这个问题,一种是在程序里面对每个地址循环使用不 同的地址定位器匹配,这涉及到匹配拟合度的比较,而 且需要设置匹配的域值,然后最后决定匹配的结果,这 个过程实现起来比较复杂;另一个方法就是建立一个组 合定位器,这需要解决当前版本不能支持中文的问题。 既然组合定位器能够支持英文,就设法把中文的地 址匹配转化成英文的地址匹配。
2.3 ArcGIS中组合地址定位器不支持中文的解决方法
2.3.1 把中文地址转化成英文编码 首先,需要从原始的地址中找出能够确定其具体位 置的单个地址要素。通常可以把地址要素分为几类:行 政区界、路名、门牌号、楼牌号、住宅小区和突出建筑等, 对于每一类的地址要素,都可以找
到一些常用的地址通 名,列举如下: 1)行政区界 省级:市(直辖市),省,市(省会),自治区,特别行 政区; 地区级:地区,盟,自治州,(地级)市; 县级:(县级)市,县,自治县,旗,自治旗,(市 辖)区; 乡级:乡,镇,街道办; 居民地:村,庄,屯,里。 2)道路 通名:路,大道,道,大街,街,巷,胡同,条,里,弄。 3)门牌号 通名:号,#。 4)楼牌号、楼名 通名:号,号楼,楼,宿舍,斋,馆,堂。 5)住宅小区 通名:里,区,园,村,坊,庄,居,寓,苑,墅。 6)突出建筑 通名:大厦,广场,饭店,中心,大楼,楼,场,广场, 馆,酒店,局,城。 根据每一类地理要素常用的地址通名,可以写一系 列函数来提取长地址中的地理要素,并把地址级别最细 化,定位精度最高的地理要素确定为长地址中能够用于 定位的地理要素,下面就以在sqlserver环境中提取道路 信息为例写一个函数: CREATEFUNCTIONfun Road( —提取道路信息 @Inputvarcharvarchar(100) —待分拆的字符 串 )RETURNSvarchar(100) —返回值的类型 AS BEGIN declare@resultvarchar(100) —返回值变量 declare@tempnum int —字符在字段中 的位置 函数开头的部分要根据需要在进行道路信息提取 前进行必要的处理,去掉不需要的信息,比如先去掉城 市信息、区县信息,等等。 ifcharindex(`路',@ inputvarchar)< > 0or char- index(`道',@inputvarchar)<> 0or charindex(`街', @ inputvarchar)< > 0orcharindex(`巷',@ inputvar- char)<> 0orcharindex(`同',@ inputvarchar)< > 0or charindex(`条',@ inputvarchar)< > 0orcharindex (`里',@inputvarchar)<> 0 begin ifcharindex(`路',@inputvarchar)<> 0 begin set@tempnum= CHARINDEX(`路',@in- putvarchar) end …… ifcharindex(`里',@inputvarchar)<> 0 begin set@tempnum= CHARINDEX(`里',@in- putvarchar)
end
set@
inputvarchar=right(@
inputvarchar,len
(@inputvarchar)-@tempnum) end set@result= @Inputvarchar return@result
END 有了获得地理要素的函数以后,就可以创建一张用 来存放地址要素的表,在这张表中存放的地址要素必须 是惟一的,并且对这些中文的地址按随机无意义惟一码 的原则进行编码。随机无意义惟一码是一种惟一编码, 不同的对象具有不同的编码值,其编码值不代表任何意 义,编码值的生成具有随机性。这里采用最简单的方式 来实现,在地址的旁边新建一行作为中文地址的代码, 118内容是:ADD +行号。结果见表2。
表
2
中文地理要素编码后的结果
Tab.2
ChinesegeographicfeatureafterGeo-coding 原始地址中文地址要素地址代码 上海市中山北路3663号中山北路ADD 1 沪东新村233号304沪东新村ADD 2 其次,要把原始地址处理后得到的能够确定位置的 地址中的中文部分用地址代码来表示。结果见表3。
表3 中文地址编码后的结果 Tab.3 ChineseaddressafterGeo-coding 原始地址中文地址地址代码 上海市中山北路3663号3663中山北路3663ADD 1 沪东新村233号304 233沪东新村233ADD 2 最后,通过中文地址把参考主题跟上面表中的编码 关联起来,这样参考主题上的地址就可以用代码来表 示。这个过程在ESRI的ArcMAP中完成,需要两个 步骤: 1)把数据库中含有中文地址编码的表数据加载到 ArcMAP中来; 2)把参考主题和数据库关联起来,从而实现中文地 址用英文表示。
2.3.2 完成地址匹配 上面的步骤实现了把需要匹配的数据库中的中文 地址和参考主题中的中文地址替换成代码的过程,后面 就是在ArcMAP中常规的地址匹配过程。首先建立单 个的地址定位器,然后在这些地址定位器基础上建立组 合的地址定位器。在ArcMAP中选择tool菜单下的地 理编码,选择正确的地
址定位器和参数,就可以完成匹 配。匹配成功的点可以通过属性工具查看这个点所对 应的中文地址。
3应用实例
在开发上海市青少年管理系统时,利用本文提供的 方法对青少年按家庭住址进行地理编码。共有50 000 多条作为测试的原始数据记录在数据表格上,在地址字 段中既有路名+门牌号地址,又有所在乡镇地址,同时 还存在一些记录没有地址信息等情况。基于这种情况, 我们以上海市的3个基础图层作为参考主题进行匹配, 这3个主题分别是道路主题、新村主题和乡镇主题。首 先把原始数据库和参考主题中的中文街道名转化成代 码形式,然后因为道路主题中包含有右起始门牌、左起 始门牌、右终止门牌、左终止门牌以及路名的字段,所以 建立USStreets类型的地址定位器,新村主题和乡镇主 题只含有区域信息,故都建成SingleField类型的地址定 位器,在此基础上建立组合定位器。经过测试发现有 90%左右的点能够定位到地图上,基本满足对青少年按 区域进行统计的目的。
4结束语
虽然在上面的例子中能够匹配的地址有90%左右, 但还有近10%的数据不能得到匹配,我们可以在实际工 作中采用下面这些行之有效的策略来提高匹配效率: 1)提高原始数据的采集精度,减少明显错误; 2)匹配前对数据进行标准化处理; 3)选择一个比较好的地理参考数据库系统,在本文 的例子中10%的地址没有匹配,很重要的一个原因是选 择的参考主题数据滞后,有些新建的道路、新村没有及 时更新。 采用把中文地址转化成代码,然后利用代码来实现 地址定位的方法,虽然绕过了ESRI产品中组合定位器 不支持中文的问题,但是这些定位技术都是建立在国外 地址命名规律的基础上,一方面我们要规范国内地址命 名,尽量使地
址的分布有规律可循;另一方面要研究国 内地址命名的规律,开发适合本国国情的地址定位器。
参考文献: [ 1] 李军,李琦,毛东军,等.北京市地理编码数据库的研究 [J].计算机工程与应用,2004,41(2): 1- 4.
[2] 张超.地理信息系统实习教程[M].北京:高等教育出版 社,2000. [ 3] 秦其明.ArcView地理信息系统实用教程[M].北京:北 京大学出版社,2001.
[
4]
ScottCrosier.GeocodinginArcGIS[M].ESRI,
380New
YorkStreet,Redlands,CA 92373- 8100,USA.2004.
[ 5] 江洲,李琦.地理编码(Geocoding)的应用研究[J].地 理与地理信息科学,2003,19(3): 24- 25. [责任编辑:王丽欣] 119第3期章意锋等:ArcGIS中地理编码方法的改进
因篇幅问题不能全部显示,请点此查看更多更全内容