何琳++马犇++李亚龙++张洁++李英杰
摘要:该研究基于Google Maps API的地址解析接口,通过导入地震应急基础数据库属性表中的名称或地址字段,自动匹配相应空间位置,重点对同属性数据对应多个空间位置的筛选该技术难点进行研究并开发软件给予解决,从而实现应急基础数据库属性数据快速空间化的功能,同时提出基于Google Maps API的地址解析持久化方案,对生成空间数据的匹配度与精确性进行研究,在数据的空间化应用中取得了较好的效果。
关键词:Google Maps API;地址解析;空间化
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)30-0010-03
Research and Implementation of Database Attributes Spatialization Based on Google Maps API
HE Lin, MA Ben, LI Ya-long, ZHANG Jie, LI Ying-jie
(Anhui Seismological Bureau, Hefei 230031, China)
Abstract: The research Based on the address parsing interface of Google Maps API. By importing the name or the address field of the attribute table in the earthquake emergency database, the attribute table can automatically match the corresponding spatial location. The research focused on the technical difficulties screening the same attribute table match the multiple spatial location to be solved through software development. And attribute table of emergency database can be quickly spatialized. It proposed the persistent program Based on the address parsing of Google Maps API, by researching the matching and accuracy, and achieved good results in the application.
Key words: Google Maps API; address parsing; spatialization
空间数据是地理信息系统的血液,GIS技术最重要的作用就是将属性数据转化成空间数据,实现属性数据的空间化表达。属性数据空间化作为地学数据处理和地学数据产品加工的一种重要手段,已经成为GIS领域的研究热点之一。而对属性数据的空间化也是一项比较艰巨的任务,数据的空间化需要大量的人力和物力以及时间上的投资,地震应急基础数据库数据更新任务量大,耗时耗力。本研究基于Google Maps API技术对Google Maps的地图信息进行地址解析,通过查找属性数据来解析坐标信息,从而实现属性数据的空间化,更形象更直观的表达出数据的位置和属性,属性数据的空间化将大大增强数据的使用效果。
1 Google Maps API技术介绍
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,是软件系统之间不同组成部分衔接的约定,目的是提供应用程序与开发人员基于某软件或硬件的用以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API 的一个主要功能是提供通用功能集,程序员通过使用 API 函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务。 API 同时也是一种中间件,为各种不同平台提供数据共享。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,因此应用程序编程接口API的设计十分重要。
地图API是一种通过JavaScript(或者其他编程语言)将网站上的地图嵌入到自己网页的应用程序接口。它基于标准的Internet协议提供功能服务,应用系统可以很容易地通过标准协议访问该功能。它提供了处理地图和向地图添加内容的功能服务,让人们能够在自己的网站上创建功能全面的地图应用。一般常用的地图API主要有:Google地图API、百度地图API、51地图API等等。
Google maps API是一种地圖API,可用于构建完整、独立的基于位置(Position)服务的应用,包括与地图(Map)相关的操控接口及与地理(Geo)相关的数据服务接口。
2 技术路线
通过Google Maps API,即Google Maps应用程序编程接口,研制一套相关软件对属性数据进行批量地址解析,实现通过导入属性表自动匹配空间属性,并对生成相应的空间数据进行判断、筛选处理,实现展示及入库的功能。
3 地址解析功能
通过对Google Maps API接口技术的研究,我们了解到解析过程分为两类:地址解析和地址反解析,两者互为相对相反的过程。所谓地址解析,即地理编码,是将地址(如“国家地震局”或“中国北京市海淀区复兴路63号”)转换为地理坐标(如纬度39.90796和经度 116.291027)的过程,我们也可以根据该地理坐标放置标记或定位地图等。而地址反解析,即反向地理编码(经纬度地址查询),是将地理坐标(如纬度39.90796和经度 116.291027)转换为地址(如“中国北京市海淀区复兴路63号”)的过程。endprint
Google Maps API 提供了地理编码器类,用于动态地对用户输入的地址或名称进行地理编码,我们主要使用 google.maps.Geocoder 对象来访问 Google Maps API 地理编码服务。由于 Google Maps API 需要调用外部服务器,因此对地理编码服务的访问是异步进行的。为此,需要传递一个回调方法,以便在请求完成时执行,此回调方法将会对结果进行处理。在实际过程中,地理编码器可能返回多个结果,我们可以自行选择返回的结果。地理编码服务要求一个用于在检索到地理编码器的返回结果后执行的回调方法,此回调应依次传递两个参数,以分别存储 results 和 status 代码。由于地理编码器可能会返回多个条目,因此 GeocoderResults 对象常量是一个数组,里面包含有我们所需要的location(经过地理编码的纬度值和经度值),我们会以 LatLng 对象(而非某种格式的字符串)的形式返回此位置。
通常Google Maps API的Geocoder对象并不只返回一个值,同时我们可以调用所有的返回值以及相关信息。但是通过研究我们发现,在诸多返回值中,首选项的解析准确度最高,且远远超过其他选项。因此,在进行地址批量解析时,我们设置首个返回值及其相关信息为地址解析结果。
4 地址批量解析
在实际过程中,通常会出现大批属性数据需要同时转换成空间数据的现象。在通过软件来实现属性数据解析经纬度坐标时,单条数据的查找会消耗大量时间,效果等同于直接搜索地名点查询经纬度,效率大幅降低。如果能通过大量属性数据的导入,依次处理这些数据,得到其空间坐标信息,会大大减少工作量,为工作人员提供方便。为此我们在单条数据导入获取经纬度的基础上,引入批量解析,将属性数据以数据表的形式导入到软件,解析后再以txt文件方式显示出需查询属性数据的经纬度,并通过excel工具实现文件格式转换,从而实现批量数据的属性到空间的转换,让解析后的经纬度信息满足入库的要求。
5 解析准确度研究
在地址解析前,我们还得对数据进行一定的研究和规范处理。一般情况下,我们对地址解析所使用的字段主要选取属性数据的位置(location)和名称(name)两个字段,通过反复尝试我们发现,Google 地图可供解析的名称一般都是对需求的数据名称有一定的要求。比如“合肥市第五十初级中学”,如果直接对其进行解析,就会出现所定位的位置会由于找不到同地名点,而被定位在合肥市政府所在区域 “中国安徽省合肥市蜀山区龙泉路”,位置和经纬度都会出现不同程度的偏差,数据的准确性得不到保证。如果我们对其名称进行规范化处理,命名改成更符合Google地图能够识别的“合肥市第五十中学”,则得出的解析结果是“中国安徽省合肥市蜀山区肥西路57号”,相应的经纬度也会发生较大的变化,通过验证发现后者结果是真实可靠的。同样的情况下,对医院数据进行解析,如果“合肥市第三人民医院”在收集数据时命名为“合肥市三院”,其实际位置“中国安徽省合肥市包河区望江东路76号-86号”则会被错误的定位到“中国安徽省合肥市庐江县103省道”,同样得不到正确的结果。所以,我们在对其他类似数据进行解析时,应避免Google地图的错误判断,尽可能地使数据能够被其识别,做到名称完整且便于理解。对于位置(location)属性,在地址很准确的情况下,能直接定位到相关位置的门牌号,但是位置在经纬度上有所偏差,比如说在软件中输入“合肥市长江西路558号”,地址就会直接定位到安徽省地震局附近的长江西路主干道上,但是如果地址不准确,比如地址“合肥市长潜路口”就会出现定位出现很大偏差,会直接定位到“中国合肥市蜀山区贵潜路口”,相应的经纬度也会出现很大的偏差。因此在对地址(location)进行解析时,要求数据准确而又详细,这在数据收集时是不太可能的。在一般情况下,我们应以名称(name)解析為主,加以位置(location)解析作为辅助。
在不同区域范围内出现相同地名点的现象时,可以通过限定区域的方法来实现区分,例如杏花村,可以通过限定池州市青阳县,再对杏花村进行地址解析;在同一区域内出现相同地名点的情况时,在数据录入时对地区所属ID以及所在地址进行规范化处理,通过ID和地址匹配的方式来对同地名点的信息进行解析和区分;另外,考虑引入其他方法收集数据的准确信息,从而实现人机交互的方式进行校正和更改。
在简化地名问题上,例如青龙满族自治县,简称青龙县,在两者的匹配问题上,首先考虑在数据的规范上需要标准化,通过建立基础数据地名库和简称库的对应,实现基础地名和简称地名的相互对应,以便解决在同一地名点出现全称和简称的问题。
6 数据准确性检查
数据是技术系统的核心,是系统评估、决策、指挥功能得以实现的基础。而数据质量是数据之根本,决定数据是否发挥重要作用的关键,通常主要包括两方面的内容:数据的时效性和准确性。由于本任务的地址解析基于即时调用Google服务器的数据,与Google地图数据是同步更新的。Google地图一般的更新周期在18个月左右,大城市的数据将更新的更频繁一些,能达到几个月一次,并且地图更新的时候会即时公布信息,这在一定程度上保证了解析数据的时效性,为数据充分发挥作用奠定了坚实的基础。
数据的准确性是数据质量在客观真实性方面的体现,地震应急基础数据的准确性更是决定着震后灾害评估结果和指挥决策的正确性。在解析过程中我们进行过抽样数据的测试,通过名称解析数据的准确性在70%以上,通过精确地址解析数据的准确性在90%以上,而解析不准确的数据通常是由于解析名称或地址与Google数据库中数据匹配度不高造成的。地址批量解析技术实现了属性数据快速空间化,但是如何判断解析后的空间数据是否准确,如何提高数据的准确性,保证解析数据的真实可靠,一直是我们研究的重点。经过多方面的研究和尝试,我们觉得通过地图定位结合返回地址值进行核对的方式来保证解析数据准确性更为简单有效、切实可行。endprint
在地址解析,即地理编码的过程中,我们可以根据解析后的经纬度坐标放置标记或定位地图等。在软件设计时,任务组加入地图定位模块,并在主界面上得以直接显示。通过点击解析结果栏中的数据,地图将自动定位到解析结果所在位置,我们则可通过缩放图层来查看解析数据是否存在于所在位置,若存在,则认为解析数据正确。或是通过地址进行确认位置,地址范围内有目标地名点,则认为解析数据正确。比如解析“合肥和平创伤骨科医院”,解析结果栏解析出经纬度及地址等信息,点击该条结果,右侧小地图则会自动定位到该点,我们通过放大图层在定位坐标附近显示出目标地名点 “合肥和平创伤骨科医院”。则我们判定该条解析结果正确。
同时,我们在对属性数据进行地址解析的时候,通过解析后的经纬度坐标可以直接进行地址反解析,并把解析后的相关信息返回,比如地址、邮编等,通过与属性数据中的相关信息进行核对,进而也可判断解析数据的正确性。
地图定位模块的实现,为数据地址解析过程中准确性的判断提供了一个切实有效的方法,显著地提高了工作效率与工作质量,确保了解析数据的真实可靠,为地震应急基础数据库及其他相关数据库建设的可靠性与准确性提供帮助,为指挥技术系统的评估、决策、指挥功能方面起着重要的保障作用。但是,数据检查又是一项复杂而又繁琐的工作,目前只能通过地图定位模块对数据进行逐条检查,来判断数据的正确性。
7 结束语
基于上述研究结果,我们基于Google Maps API接口开发了Google地图经纬度地址批量查询软件,该平台使用简单方便,也便于后续相关应用的拓展。
该软件平台实现的主要功能包括:通过输入GPS/Google地图经纬度信息对解析地址进行精确定位;通过输入地址或名称对经纬度坐标进行批量解析;对地址解析结果进行地图定位,并能实现地图的放大、缩小和移动;解析的同时返回地址值以做数据对比;批量导出解析数据及信息等。通过该软件平台,实现了属性数据的批量空间化,为地震应急基础数据库及其他相关数据收集工作提供了切实服务。
在利用该平台进行属性数据批量解析的过程中,通常会遇到不少解析结果不对的情况,我们通过研究Google Maps API数据库的数据特征规范,制订了一套地址批量解析方案:
第一步,若原始数据库提供详细地址(精确到门牌号),则由原始数据库中批量提取地址段(location)粘贴至导入栏,导入任务并批量解析。根据右侧定位地图或者返回的地址值人工检查解析数据的正确性,并将错误的解析数据从库中挑出来放入问题库,正确的解析结果批量导出至原始数据库。(若无详细地址则直接进入下一步)
第二步,由原始数据库(问题库)中批量提取名称段(name),
粘贴至导入栏,导入任务并批量解析。继续根据右侧定位地图或者返回的地址值人工检查解析数据的正确性,并将错误的解析数据从库中挑出来放入问题库,正确的解析结果批量导出至原始数据库。
第三步,再将问题库中的地名点前加行政区划限定,并再次導入解析,同样根据右侧定位地图或者返回的地址值人工检查解析数据的正确性,将正确的解析结果批量导出至原始数据库。
该方案的研究,解决了批量数据解析的正确性与可行性的问题。通过该方案批量处理后的数据,大部分原始数据均可检查正确后入库,少部分无法正确解析的数据则大多属于Google Maps API数据库中未收录的数据,或是数据本身存在问题,需通过其他手段解析,此处不再作讨论。
基于Google Maps API接口的Google地图经纬度地址批量查询软件平台可直接通过本地网页访问提供在线解析服务,整体界面简洁友好,易操作,较好地实现了各模块功能的集成,使得软件的架设更加简单,可移植性强,并为后续的推广应用服务做好充分准备。该平台实现了地震应急基础属性数据批量快速空间化,为地震应急基础数据库各类空间数据的更新与完善提供了一种新的机制,更新方式快捷高效,更新周期短,并且大大减轻了数据收集的工作量。
参考文献:
[1] 江宽, 龚小鹏. Google API开发详解[M]. 北京: 电子工业出版社, 2008.
[2] 李垠, 特木其勒, 刘可, 等. Google地图在地震信息发布中的应用[J]. 地震地磁观测与研究, 2011(10).
[3] 刘欣, 滕志霞. 基于Google Maps API的交通信息系统平台的研究[J]. 交通工程, 2011(6).
[4] 苏娟. 基于Google Map API地震信息发布系统的研究与实践ED2[D]. 北京: 首都师范大学, 2009.endprint