基于互联网的地图标注系统设计与实现段克敏1李宏利1邰晓峰2(1.北京长地万方科技有限公司,北京100043;2.广东融讯信息科技有限公司,广州510656)摘要:基于互联网的地图标注系统涉及到点、线和面的标注,对解决地图数据生产所面临的现势性、完备性、正确性以及准确性问题具有积极的意义。系统是在Oracle数据库、POI搜索引擎和瓦片地图数据服务的基础上,采用Ajax技术、NHibernate技术设计开发而成的,文章给出了系统的设计和实现。关键词:地图标注;Ajax;NHibernateDesignandImplementationofMapLabelSystemBasedonInternetAbstract:MapLabelSystemBasedonInternetinvolveslabelpoint、labellineandlabelpolygon,whichispositivetodealwiththeproblemsofuntimely、incomplete、incorrectandinaccuratethatiscomeacrossintheprocessofelectronicmapdataproduction.ThedevelopmentofthissystemisbasedontheOracleDatabase、theSearchEngineofPOIandTiltMap,andusingthetechnologyofAjaxandNHibernate.Thispapermainlydiscussesthedesignandtheapplication.Keywords:MapLabel;Ajax;NHibernate作者简介:段克敏(1976—),男,陕西咸阳人,高级工程师,学士,1999年毕业于浙江大学地球科学专业,主要从事海量空间数据处理、GIS系统集成方面的工作。0引言随着基础设施建设以及城镇化的快速发展,地理信息也随之在不断变化,地物的形态和功能都在不断地发生着变化。从而使地图的现势性、完备性、正确性以及准确性受到了极大的影响,引起人们衣食住行的不便,传统的地图更新方式已很难满足人们的需要,并且在人力、物力、财力以及社会资源等方面的消耗也是非常巨大的。互联网给人们的生活带来了无法估量的便利,而且已非常普及,利用互联网机制,让合格的用户在互联网地图上标注身边所发生的地理变化是一种快捷有效的地理数据采集方式。本文结合Ajax和Nhibernate技术,将互联网地图以及地理数据采集结合在一起,设计和实现了该系统。1Ajax+Nhibernate与网络地图Ajax是AsynchronousJavaScript+CSS+DOM+XMLHttpRequest的略称[1],是多种技术的综合,它使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用XMLHttpRequest对象进行异步数据读取,使用Javascript绑定和处理所有数据。介于浏览器和服务器之间,浏览器的用户接口与服务器之间的交换全部是通过Ajax进行的。NHibernate是类似于Hibernate的一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relationalmapping(ORM))技术用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。NHibernate不仅仅管理.NET类到数据库表的映射(包括.NET数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和ADO.NET处理数据的时间[2]。基于互联网的地图也称为网络地图。从广义上来说,网络地图也是一种电子地图,是在计算机屏幕上显示、阅读和使用的,因此具有电子地图的一般特点,即动态性、交互性等特点[3]。在网络地图上,普通用户可以创建地图,标注个性化的地标,让被动的“地图用户”转变为主动的“内容提供者”,不但提高了地图网站的用户黏度,还把地图网站变成了一个社会化网络平台。使用Ajax和NHibernate技术进行基于互联网地图的标注系统开发,综合Ajax的异步数据请求以及NHibernate的对象的持久化以及方便的数据获取功能,使得用户可以方便的浏览地图,同时也可以容易便捷的在客户端地图浏览过程中标注和保存自己关注的POI或者道路等等地理信息。两种技术的信息请求响应机制如图1。WebUIAjaxEngineJavaScriptCallHTML+CSSDataWebServerNHibernateHQLEntityListOracleDB&瓦片数据HTTPRequestXMLDataSessionQueryQueryList客户端服务器端图1Ajax&NHibernate技请求响应机制2系统的设计2.1系统的体系结构设计地图标注系统采用层次架构,体系结构如图2,分别是(1)系统的表示层即Web页面表示层。(2)系统的业务逻辑层(BLL)即系统的业务逻辑分析。(3)数据服务层(DAL)。三个部分,具体为“浏览器/Web服务器/数据库服务器”[4]。表示层,是地图标注系统的用户接口部分,担负着用户与系统之间的对话功能。它用于检查用户从键盘等输入的数据,检查的内容只限于数据的形式类型和取值范围,不包括有关业务本身的处理逻辑,显示输出的查询、处理结果。业务逻辑层,是根据表示层发送来的请求条件,根据地图标注系统本身的业务流程逻辑进行分析、检索以及处理从数据层获取的必要的业务数据,然后把相应的业务处理结果分别存入后台数据库以及反馈到客户请求端。数据访问层在本系统中是利用Nhibernate提供的对象关系映射框架ORM将内存对象和关系数据进行相互映射,进行对象的持久化。另外就是POI数据的搜索引擎技术可以使POI数据的查询迅速高效且准确;栅格引擎使背景地图瓦片数据能够快速显示和浏览,操作便捷。Web页面表示层请求分发页面控制对象封装业务控制数据访问ORM持久化数据分析搜索引擎栅格引擎表示层业务逻辑层数据访问层后台数据空间数据属性数据瓦片数据系统数据图2地图标注系统体系结构图系统后台数据主要有:空间数据、属性数据、瓦片数据和系统数据。2.2模块设计WebUIIBLLIDALBLLDALModelNhibernateDataBase图3标注系统软件包模块图系统的模块结构是根据系统的体系结构设计而来的,总的模块结构如图3。大体为客户端UI模块;业务逻辑层模块;数据访问层模块;数据持久层模块。地图标注系统的层次架构具体为“浏览器/Web服务器/数据服务器”。其中的数据存储和传递使用的是Model类,Model类中定义了一个实体(例如POI、道路、用户、POI统计、道路统计等等)的所有属性变量,这些都是用来传递信息,并不对信息进行处理和操作。部分实体是通过NHibernate对象关系映射框架(ORM),把业务实体在内存中的对象持久化到关系数据库中。ORM机制的核心是一个XML文件,命名为后缀为.hbm.xml的文件,这个文件描述了数据库模式和Model类的具体绑定。2.3系统功能设计地图标注系统的用户在标注POI或者道路的时候,首先通过POI搜索引擎检索,看数据库中有没有自己所关心的POI数据或者道路数据,如果检索没有,那么就在浏览器地图上找相应的位置,进行标注和属性信息的录入,最后保存标注结果。对于标注的数据,有专人要对每天所标注的数据进行‘涉密点的检查’,然后进行质量检查和审核,最后进行确认(一方面是资料确认,一方面可以提供给外业团队去现场实际确认),将新的经过确认的有效数据和原有的母库数据进行融合,作为新的母库数据。标注系统的功能主要有:(1)系统表示层功能主要有:系统的地图显示、用户的POI标注界面、用户的道路标注界面、用户的建筑物标注界面、POI数据的质量检查以及审核界面、道路数据的质量检查以及审核界面、POI数据的编辑修改界面、道路数据的编辑修改界面、任务分配界面、系统的用户管理界面、系统的权限管理界面、数据的导出界面等等。(2)系统业务逻辑层功能主要有:POI搜索引擎、栅格数据引擎、周围区域检索、POI数据的增加修改删除、道路数据的增加修改删除、地理坐标和显示屏幕及相应图片像素之间关系和转换、系统用户管理、系统权限管理、系统的任务分配管理、用户的作业区域管理、系统的数据管理等等。(3)系统数据访问层功能主要有:根据业务逻辑层的要求组织声称响应的HQL语句,检索并返回业务逻辑层所需要的数据。另外对数据进行插入、更新、删除等操作。(4)数据库中数据的导入导出功能。2.4系统数据库设计2.4.1系统数据组成系统数据主要由瓦片数据、地理数据(属性数据和空间数据)以及系统的管理数据三部分构成,分别如下:瓦片数据是地图显示的背景图片,每片数据大小是256*256个像素,分十五个显示等级,主要表示内容是行政区划\水系\绿地\铁路\道路\居民地\信息点\地名店等。不同等级的瓦片数据表示的内容依显示比例尺而定,符合国家基本比例尺地图要素的选取和综合规则。地理数据是系统用的矢量型检索数据,主要包括POI信息点数据、道路数据、行政区划数据等。系统数据:主要有用户管理、用户详细信息、角色信息、权限信息、菜单管理信息、权限管理信息、质量审核、任务分配、上传图片管理信息等。2.4.2数据的物理组织和逻辑设计瓦片数据是栅格图片数据,根据比例尺的不同设定了15个等级,每个等级根据需要选用不同的矢量数据图层进行组合。瓦片数据是以栅格图片的文件形式存放的,以文件夹的方式组织数据的,文件夹的命名方式是根据等级级别、图片左下角的经纬度等方式来命名的,图片文件的命名方式是根据图片的经纬度来计算命名的。地理数据和系统数据是存放在Oracle10gR2数据库中的。地理数据中的空间数据在数据库中是利用OracleSpatial的SDO_Geometry数据类型存放的,这样便于空间数据和属性数据存放在同一条记录中也避免了利用BLOB数据类型存放坐标序列。同时也可以利用OracleSpatial提供的空间数据操作函数快捷地完成所需的空间操作。系统数据是以关系表的形式存储。SystemUserRoleAndUser1UserInfoCityManageRole1RoleOperationMenu图4系统数据库的部分逻辑结构图3系统的实现3.1开发平台与运行环境开发语言:C#.Net、JavaScript、PL/SQL。编程工具:VisualStudio2005、PLSQLDeveloper。服务器环境:64位Windows2003Server、64位Oracle10gR2。3.2客户端的实现在客户端的开发主要是WebUI页面的开发。使用HTML语言设计和构建网页布局,设计用户使用的方式以及返回内容如何展现给终端用户。利用JavaScript脚本语言编写函数check(),动态检查用户输入的规范性检查,以及局部的动态调用和请求。利用CSS定义网页的布局、字体、颜色背景等等,使网页的内容和表现分开,减少代码量,使网页简练丰富,增加网页的浏览速度。标注系统中主要的功能就是POI点数据的增加、修改和删除,以及道路数据的增加、修改和删除,这些功能的实现都是依靠背景地图作为参照的,所以背景地图是显示客户端开发的重要部分,背景地图是显示在DIV容器中的。functioninit(type){……Maplet=newRMap(0,0,800,450,latt,lonn,9,IMG_SERVER+'/rt/mapdb/');document.getElementById(mapdiv).appendChild(Maplet.get());toolbox=Maplet.getToolBox(JS_SERVER+'/rapi/rwidget/rmap/toolbox/');toolbox.addCross();toolbox.addZoomBar();toolbox.addPan();toolbox.add