当前位置:文档之家› ArcGIS中地理编码方法的改进_章意锋

ArcGIS中地理编码方法的改进_章意锋

第30卷第3期2007年6月测绘与空间地理信息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- 040引言随着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@resultEND 有了获得地理要素的函数以后,就可以创建一张用来存放地址要素的表,在这张表中存放的地址要素必须是惟一的,并且对这些中文的地址按随机无意义惟一码的原则进行编码。

随机无意义惟一码是一种惟一编码, 不同的对象具有不同的编码值,其编码值不代表任何意义,编码值的生成具有随机性。

这里采用最简单的方式来实现,在地址的旁边新建一行作为中文地址的代码, 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 最后,通过中文地址把参考主题跟上面表中的编码关联起来,这样参考主题上的地址就可以用代码来表示。

相关主题