APP下载

基于ArcGIS Engine对警车实时调度平台的开发

2017-11-04王帝文

城市地理 2016年5期
关键词:二次开发

王帝文

摘要:在地理信息系统发展飞速发展的今天,越来越多的行业开始使用GIS来分析解决问题。近年来恐怖势力有所抬头,安全形势不容乐观,且犯罪案件的发生具有随机性,传统的调度方式已经无法满足警方快速反应的需求,为了实现实时调度功能,本文着重阐述了空间查询、实时定位、路径分析技术的实现方法,研究如何利用ArcEngine二次开发警务调度平台。

关键词:GIS;实时调度;二次开发

1、引言:为了满足当下快速出警的需求,许多大城市的警务部门开始使用警车调度平台,作为打击犯罪分子的高科技武器,但目前在运行的警务平台大多以底层开发为主,缺点是开发周期长,技术实施难度大,维护成本高,使得许多偏远地区的警务部门,由于资金紧张、技术缺乏而难以实现。本文介绍的利用ArcGIS Engine进行二次开发,使用C#作为开发语言,其优点是可以快速搭建系统框架,大幅度缩短软件开发周期,借助ArcGIS提供的地理数据分析接口,封装了空间查询、缓冲区分析、路径分析等一系列功能,为实现警车的实时调度而服务。通过这种方法做出的产品功能完备,价格低廉,维护简单,兼容性好,可扩展性强,尤其适合中小城市日常的工作需求,较大型警务平台其性价比更高。

2、总体设计

2.1需求调查。进入21世纪,国内城市化步伐加快,城市的安全形势却不容乐观,导致出警范围和出警强度进一步加大,但许多偏远城市的警务部门对于警力调度还停留在初级阶段,即利用纸质地图进行人工查询定位,这种方法效率低、误差大,很容易因为人为判断失误而延误出警时间,造成交通瘫痪、公民财产损失等一系列严重后果。因此,本文总结了警务部门存在的现实需求:①在电子地图上,实时更新警车位置。②当发生案情时,能快速对案发地点进行定位。③根据具体情况,制定出警最优路线,辅助指挥者实时调度。

2.2开发平台。警务实时调度系统选择成熟的win7操作系统,ESRI的ArcGIS Engine9.3为开发平台,Visual Studio 2008为开发环境,C#为开发语言。ArcGISEngine是完整的嵌入式GIS组件库,可在多种编程语言中调用接口,它的核心是由ArcObjects一组开发包组成,可将ArcGIS的功能嵌入到其他应用软件中,这样的程序安装时就不需要安装ArcGIS专业软件,极大地减轻了警务部门的运行负担,因此适用于警务实时调度系统的二次开发。

3程序设计及实现

3.1程序界面设计。在实现系统分析功能之前,首先应搭建地图显示框架,通常有两种方法,一种适合于功能要求较高的程序编写,所有的控件由自己进行代码编写,一般用于底層开发;另一种就是利用ArcEngine提供的各项控件,快速搭建界面,具体如下:在VS2008中,我们可以新建一个Windows窗体项目,然后从ArcGISWindowsForms选项卡向其中添加ToolBarControl、TOCControl、MapControl控件,并分别设置属性窗口中的Dock为Top,Left,Fill,完成窗口布局,即顶部为工具栏、左侧为图层列表,主工作区为地图控件,如图1所示。

ToolBarConrol控件提供了许多Commands和Toolsets,实现对地图控件的操作,常用的有Open(打开地图文件)、Zoom in/out(放大缩小)、Pan(拖动地图)等,我们可以根据自己的需要添加相应的命令和工具。除此之外,ArcEngine提供了一种模板—MapControl Application,其中已经嵌入各种开发所需的基础控件,便于我们快速进行其他功能的开发,不但节省了时间,也降低基础出错率,本文就采用这个模板作为软件界面。

3.2添加图层

在ArcGIS中地图是由点、线、面三种类型的矢量数据组成,这些要素类以Shapfile的格式存储在地理数据库Geodatabase中,我们可以通过ArcCatalog对地理数据进行管理,将所用的要素类放在一个要素数据集中,统一数据标准。为了满足警车的定位调度功能,需要Map添加含有地标、道路、居民地信息的要素类,具体实现如下:

(1)为了添加要素类到地图中去,首先从工具箱中找到MenuStrip(菜单栏)并添加,然后在菜单栏中键入一个“添加图层”的菜单项,如图2所示。

(2)双击进入代码编写页,主要用到的接口有IWorkspaceFactory,IFeatureWorkspace,这两个接口用于建立一个工作空间以访问地理数据库,建立数据库连接后使用IFeatureClass接口实例化—个要素类对象,将数据库中的要素类赋给当前对象,完成数据的传递,但为了显示在地图上,就需要将要素类添加到图层中去,通过IFeatureLayer接口,在空图层中加入已获得要素类,最终实现图层添加功能。

(3)如果需要添加多个图层,批量建立对象并修改OpenFeatureClass的参数即可,此处不做赘述。在完成“图层添加”后,根据程序设计目的,需要将地图上的地点名称进行标注,由于标注是作为图层属性存在的,因此可以使用TextElement绘制,其原理是将属性表的某个属性创建TextElement对象,然后调用IGraphicsContainer接口的AddElement方法进行标注的添加,程序运行效果如图3所示。

3.3报警定位。地图包含信息量大,人工查找精度低,速度慢,报警定位作为警务调度的第一步,如果不能快速准确地执行,将会引发严重的案情延误问题。利用ArcEngine就可以快速组建空间查询功能,基于已添加的点图层,使用图层属性中的名称字段进行空间属性查询,以实现对案发地的位置定位,查询流程如图4所示。

根据报警人提供的地点信息,利用空间属性查询并高亮案发地点。完成空间属性查询需用到以下主要接口:(1)IFeatureLayer,获取需要进行查询的图层。(2)IFeatumSelection,此接口可以用来选择指定图层的要素,他的成员SelectFeatures可以根据QueryFilter的实例化对象,选择具有限定条件的要素并高亮显示在地图上。(3)IC!ueryFilter,该接口可以帮助用户过滤不需要的值,它的WhereClause属性用于设定过滤表达式,限定返回的要素,即Select..Where..语句中的条件语句,该语句可以通过设置一个TextBox进行传递,但需要注意的是,Geodatabase支持sQL语言作为模糊查询语句,所以该语句在编写代码时要给字段名加上中括号([字段名]),限定条件加上双引号,这样格式的语句才能在数据库中执行,考虑到地图的大数据量,特定义一个缩放函数,将选中的要素进行居中显示,程序运行效果如图5所示。endprint

3.4警车实时定位。警车在日常巡逻任务中,时刻都有可能接到调度命令,只有掌握警车的实时位置,才能制定出最优出警路线,用TextElement在地图上模拟车辆的行驶轨迹,其路线由一组点(x,y)构成,x为经度,y为纬度,数据的获取方式是接收车载GPS传回的经纬度坐标,示意图如图6所示。

利用返回的经纬度坐标,可以在地图的指定位置画出TextElement,即将警车作为文字图元在GraphicsContainer中画出,为了突出显示警车,可用ICallout接口定义—个气泡。绘出警车后,下一步是让警车“动起来”,由于要求数据的实时性,所以需要向程序中加入一个Tuner控件,以设定间隔对经纬度数据(x,y)进行更新,最后加入一个Buuon控件作为功能开启按钮。这些文本图元将不占用图层资源,只在GraphicsContainer中绘出,极大地节省内存空间,提高了程序反应速度,运行效果如图7所示。

3.5出警路线制定

3.5.1无向网络。制定出警路线需要用到最短路径分析功能,使用它的前提是建立无向网络,GIS中的网络,是指线状要素相互连接所形成的—个线状模式,如道路网。将经过编辑的点状和线状要素单独提取出来作为一个图层,这就是可以进行路径分析的道路网络模型。ArcEngine中无向网络的建立需要用到网络数据集,它可以在ArcCatalog中进行实现。首先创建一个FeatureDataset,将道路中心线要素导入,新建一个具有拓扑关系的网络数据集,设置连通性和转弯规则,然后创建相应的网络属性,如字段名为Meters,類型为double,它表示的是道路长度,又如字段名为OneWay,类型为Text,目的是为了区分具有不同通行属性的道路。当全部设置完成后,系统将自动生成一个汇总报告,确认无误即可仓犍网络数据集。

3.5.2最短路径分析。在上文中已经解决了报警定位和警车定位的问题,依靠构建的道路网络模型,我们使用GIS的最短路径分析功能,系统会在两点间自动规划出一条最短路径,其原理是新建一个空图层,获取网络数据集中的点要素和线要素并添加进去,然后确定所要分析的路径点,设置捕捉容差,进行字段匹配,再将路径点加载到图层中,通过INAContext接口设置分析参数,最终在地图上显示出最短路径及结果信息。由于网络分析较复杂,因此我们新建了一个窗口以作分析界面,程序运行效果如图8所示。

结论:本文从GIS的定义、功能入手,介绍了现阶段警务部门的现实需求,同时总结了现有警务平台存在的问题,提出了利用ESRI公司的二次开发工具ArcEngine结合Visual C#开发环境快速搭建警务调度平台的方法,并对建立该平台的理论基础及实现过程进行了详细的阐述,并展示了程序运行效果,这种方法大大降低了开发难度,降低了开发成本并缩短了开发周期,而且建立的平台具有较强的空间查询和分析功能。endprint

猜你喜欢

二次开发
初中生物教材插图的分类及二次开发
例谈对高中数学教材中习题的二次开发
浅谈CAD软件二次开发的方法及工具
例谈课本习题的“二次开发”
高中物理教材导入的“二次开发”