王帝文


摘要:在地理信息系統發展飛速發展的今天,越來越多的行業開始使用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