鐘凱 黃義忠 譚榮建 馬義超 王恒煊
摘 要:為了提高溫州市鹿城區(qū)城市管理與行政執(zhí)法局執(zhí)法效率,采用數(shù)據(jù)庫技術(shù)與地理位置相結(jié)合的方式,設(shè)計(jì)并開發(fā)了溫州市鹿城區(qū)違停管理系統(tǒng),以取代傳統(tǒng)的手工Excel記錄方式。通過數(shù)據(jù)分析和功能分析明確系統(tǒng)功能,并進(jìn)一步給出設(shè)計(jì)方向、實(shí)現(xiàn)方法與關(guān)鍵技術(shù),包括SQL查詢、Excel表數(shù)據(jù)添加、圖層屬性查看、查詢統(tǒng)計(jì)、密度分析與熱力圖顯示等。開發(fā)設(shè)計(jì)出的基于GIS的城市違停管理數(shù)據(jù)庫系統(tǒng),可以將歷史違停數(shù)據(jù)與地理位置信息相結(jié)合,形成可視化的數(shù)據(jù)綜合統(tǒng)計(jì)分析平臺(tái),從而對未來形勢進(jìn)行預(yù)判,并為今后的停車場選址提供依據(jù)。
關(guān)鍵詞:GIS;車輛違停管理;SQL查詢;統(tǒng)計(jì)查詢;熱力圖;數(shù)據(jù)可視化
DOI:10. 11907/rjdk. 182019
中圖分類號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800(2019)004-0127-06
0 引言
隨著機(jī)動(dòng)車數(shù)量的不斷增長,城市道路的承載量日趨增大,泊車位呈現(xiàn)過飽和狀態(tài),城市違?,F(xiàn)象時(shí)有發(fā)生,對此,本文以溫州市鹿城區(qū)為例進(jìn)行研究。吳益[1]和陳志利[2]從公共管理角度論證了溫州市鹿城區(qū)的違停狀況與解決違停問題的必要性;吳鎏鵬[3]采用B/S架構(gòu)和Java語言設(shè)計(jì)開發(fā)了一套違停信息管理系統(tǒng),但其研究未將違停數(shù)據(jù)與地理位置信息相結(jié)合進(jìn)行可視化展示。因此,本文采用數(shù)據(jù)庫技術(shù)以及C#結(jié)合ArcEngine二次開發(fā)技術(shù),設(shè)計(jì)一套城市違停管理數(shù)據(jù)庫系統(tǒng)[4-5],可實(shí)現(xiàn)違停數(shù)據(jù)的快速導(dǎo)入并關(guān)聯(lián)地理位置信息,生成可視化的違停數(shù)據(jù)矢量圖,并能快速查詢違停數(shù)據(jù),實(shí)現(xiàn)密度分析并生成可視化的違停數(shù)據(jù)熱力圖,從而實(shí)現(xiàn)對違停狀況的分析與管理。
1 需求分析
城市違停管理數(shù)據(jù)庫系統(tǒng)包含數(shù)據(jù)庫與管理系統(tǒng)兩部分[6]。
1.1 數(shù)據(jù)庫需求分析
數(shù)據(jù)庫部分應(yīng)包含以下3個(gè)功能,分別為:
(1)數(shù)據(jù)導(dǎo)入。本項(xiàng)目數(shù)據(jù)源為Excel表格,包括歷史記錄表格數(shù)據(jù)與通過網(wǎng)絡(luò)自動(dòng)生成的實(shí)時(shí)表格數(shù)據(jù)。通過新建查詢功能或操作員的手動(dòng)操作,將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫系統(tǒng)。
(2)數(shù)據(jù)統(tǒng)計(jì)與關(guān)聯(lián)。完整的數(shù)據(jù)庫系統(tǒng)包括地理基礎(chǔ)空間數(shù)據(jù)、車輛違停歷史數(shù)據(jù)、違停實(shí)時(shí)數(shù)據(jù)、路段數(shù)據(jù)以及中隊(duì)數(shù)據(jù),本系統(tǒng)包含的地理空間數(shù)據(jù)為地名坐標(biāo)文件數(shù)據(jù)。通過查詢語句將缺少空間坐標(biāo)的違停記錄與地址坐標(biāo)數(shù)據(jù)相關(guān)聯(lián),生成一個(gè)包含X/Y空間坐標(biāo)數(shù)據(jù)的新表,從而完成數(shù)據(jù)關(guān)聯(lián)。
(3)數(shù)據(jù)導(dǎo)出。根據(jù)數(shù)據(jù)庫的穩(wěn)定性需求以及大數(shù)據(jù)環(huán)境的現(xiàn)實(shí)情況,需要將數(shù)據(jù)庫中關(guān)聯(lián)的數(shù)據(jù)定時(shí)導(dǎo)出備份,并入庫存檔。數(shù)據(jù)導(dǎo)出類似于數(shù)據(jù)導(dǎo)入。
1.2 管理系統(tǒng)需求分析
管理系統(tǒng)應(yīng)包含以下5個(gè)功能,分別為:
(1)圖層加載功能。本系統(tǒng)基于ArcEngine技術(shù)進(jìn)行二次開發(fā),所以基礎(chǔ)數(shù)據(jù)需要通過“加載圖層”功能實(shí)現(xiàn)。
(2)表數(shù)據(jù)加載功能。表數(shù)據(jù)即為導(dǎo)出備份的Excel表數(shù)據(jù),以及其它歷史違停數(shù)據(jù)。通過該功能將表中一條條獨(dú)立記錄以X/Y坐標(biāo)數(shù)據(jù)形式結(jié)合空間參考文件生成統(tǒng)計(jì)點(diǎn),自動(dòng)添加至圖層窗口,作為統(tǒng)計(jì)分析的主體。
(3)右鍵菜單查看屬性功能。將生成的統(tǒng)計(jì)點(diǎn)數(shù)據(jù)添加至圖層窗口后,圖層名自動(dòng)添加至圖層列表,然后通過圖層列表右鍵菜單調(diào)出“查看屬性表”選項(xiàng),打開屬性表窗口,可以查看選中圖層的完整屬性。
(4)統(tǒng)計(jì)查詢功能。類似于GIS中的按屬性查詢,是本系統(tǒng)的核心功能。通過篩選關(guān)鍵數(shù)據(jù)信息,實(shí)現(xiàn)分時(shí)段統(tǒng)計(jì)、分路段統(tǒng)計(jì)與分中隊(duì)統(tǒng)計(jì)等查詢統(tǒng)計(jì)功能,并能實(shí)時(shí)顯示在窗口,十分快速、準(zhǔn)確。
(5)密度分析與熱力圖顯示功能。通過數(shù)據(jù)可視化分析技術(shù)生成熱力圖,能直觀了解點(diǎn)的分布規(guī)律及分布形式,從而幫助管理者快速理解數(shù)據(jù),找出海量數(shù)據(jù)中的規(guī)律并從中提取有用信息,為決策分析提供了便利。
2 總體架構(gòu)
一個(gè)完整的管理信息系統(tǒng)應(yīng)包括軟硬件支持層、數(shù)據(jù)層、應(yīng)用層3部分[7-8]。本系統(tǒng)總體架構(gòu)如圖1所示。
2.1 軟硬件支持層
軟硬件支持層是平臺(tái)運(yùn)行的主要環(huán)境支撐,包括數(shù)據(jù)庫服務(wù)器、應(yīng)用服務(wù)器、網(wǎng)絡(luò)設(shè)備、操作系統(tǒng)軟件等設(shè)施,可為違停大數(shù)據(jù)分析平臺(tái)建設(shè)提供軟硬件支持。
2.2 數(shù)據(jù)層
數(shù)據(jù)層主要負(fù)責(zé)存儲(chǔ)與管理數(shù)據(jù),包括數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)讀寫、數(shù)據(jù)備份等功能。數(shù)據(jù)層由數(shù)據(jù)庫軟件、數(shù)據(jù)處理語言與數(shù)據(jù)表組成,其中包含地理空間數(shù)據(jù)、車輛違停歷史數(shù)據(jù)、車輛違停實(shí)時(shí)數(shù)據(jù)、路段數(shù)據(jù)、中隊(duì)數(shù)據(jù)等。
2.3 應(yīng)用層
應(yīng)用層是面向用戶提供各類業(yè)務(wù)功能與交互的界面層,將服務(wù)層提供的各類服務(wù)通過友好的功能界面進(jìn)行封裝,提供給用戶使用,并與用戶進(jìn)行交互操作,主要包括地圖加載切換功能、數(shù)據(jù)加載功能、實(shí)時(shí)統(tǒng)計(jì)分析功能、屬性表查詢功能、密度分析與熱力圖顯示功能等。
3 數(shù)據(jù)庫結(jié)構(gòu)與查詢
3.1 數(shù)據(jù)庫結(jié)構(gòu)
違停數(shù)據(jù)庫中主要存儲(chǔ)基礎(chǔ)地理數(shù)據(jù)與違停數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)如圖2所示。
其中,基礎(chǔ)地理數(shù)據(jù)包含中隊(duì)數(shù)據(jù)、路段數(shù)據(jù)、地名統(tǒng)計(jì)數(shù)據(jù)等涉密敏感數(shù)據(jù),所以本文未作收錄,也不作演示,但本文在數(shù)據(jù)庫中模擬了一份臨時(shí)地名地址數(shù)據(jù)作為基礎(chǔ)地理數(shù)據(jù),包含3個(gè)字段:地名、X坐標(biāo)、Y坐標(biāo)。
違停數(shù)據(jù)包括歷史違停數(shù)據(jù)與實(shí)時(shí)數(shù)據(jù)。歷史數(shù)據(jù)為歷史時(shí)間段的違停記錄,可關(guān)聯(lián)地理坐標(biāo)數(shù)據(jù),是完整的違停數(shù)據(jù)記錄,數(shù)據(jù)量龐大且涉密;實(shí)時(shí)數(shù)據(jù)是通過多渠道實(shí)時(shí)接收到的違停記錄數(shù)據(jù),包括實(shí)時(shí)更新的涉密數(shù)據(jù)以及一份采取去密操作后的樣例數(shù)據(jù)。實(shí)時(shí)數(shù)據(jù)只包含違停記錄的地址或位置信息,而缺少對應(yīng)坐標(biāo)信息。樣例數(shù)據(jù)包含以下7條記錄:記錄編號(hào)、錄入時(shí)間、道路編號(hào)、路段編號(hào)、違規(guī)項(xiàng)、中隊(duì)編號(hào)及車牌號(hào)。
3.2 SQL查詢
樣例數(shù)據(jù)與臨時(shí)地名地址數(shù)據(jù)之間相互獨(dú)立,且數(shù)據(jù)量較大,要為樣例數(shù)據(jù)增添地理位置坐標(biāo),可以通過在兩張Excle表數(shù)據(jù)之間建立SQL查詢加以實(shí)現(xiàn)[9-14]。在數(shù)據(jù)庫中,違停樣例數(shù)據(jù)為表wt,而臨時(shí)地名地址數(shù)據(jù)為表loc,現(xiàn)需要通過查詢,將表loc中的坐標(biāo)信息通過地址字段值關(guān)聯(lián)至表wt中的每一條記錄。
查詢思路如下:如果wt的地址字段值(H_Address)出現(xiàn)了對應(yīng)表loc中的地址記錄,意味著該違停記錄有了對應(yīng)的位置信息(WEITING_poi_x,WEITING_poi_y),否則,在wt表與本記錄之外的其它違停記錄中查找:“是否有對應(yīng)的道路及其路段(h_roadid,H_RoadSectionId)相同的其它記錄,且其地址(H_Address)也在loc中的地址(H_Address)出現(xiàn)”,如果有滿足該條件(condition1)的記錄r2,則取出r2的地址,并替換r1的地址,r1.h_address=r2.h_address。如果以上兩點(diǎn)都不滿足,即意味著表wt中該項(xiàng)記錄的地址字段值在表loc中不存在完全對應(yīng)的記錄。繼續(xù)用地址(r1.h_address)在loc中尋找地址記錄,觀察r1.h_address的前部是否與其一致。例如 r1.h_address=“甌江大廈南門”在loc中有l(wèi)oc.h_address=“甌江大廈”的記錄,則r1.h_address=“甌江大廈”。如果上述查找都失敗,則說明該地址無法(直接或間接)找到匹配的地址位置信息,需要操作員手工篩選關(guān)聯(lián)數(shù)據(jù)。
具體查詢流程如圖3所示。
4 功能設(shè)計(jì)與實(shí)現(xiàn)
4.1 圖層加載
通過menuStrip菜單欄上的“文件”-“載入”,打開文件選擇界面,選擇并添加圖層文件“溫州市鹿城區(qū)歷史違停柵格-矢量圖”,實(shí)現(xiàn)圖層加載功能,得到結(jié)果如圖4所示。
打開。mxd文件關(guān)鍵代碼如下:
System.Windows.Forms.OpenFileDialog open2 = new OpenFileDialog();
open2.Filter = "Arcgis mxddocument(*mxd)|*mxd";
open2.Multiselect = false;
open2.Title = "打開arcgis地圖文檔";
if (open2.ShowDialog() == DialogResult.OK)
{
if (axMapControl1.CheckMxFile(open2.FileName))
{
axMapControl1.LoadMxFile(open2.FileName);
axMapControl1.Refresh();
}
}
如果要實(shí)現(xiàn)分別加載柵格數(shù)據(jù)、矢量數(shù)據(jù)以及多種類地圖文檔,代碼如下:
System.Windows.Forms.OpenFileDialog open1 = new OpenFileDialog();
open1.Filter = "shape文件(*.shp)|*.shp";
open1.Filter += "柵格數(shù)據(jù)(*.jpg,*.bmp,*.tiff)|*.jpg;*.bmp;*.tiff|";
open1.Filter += "地圖文檔(*.mxd,*.mxt,*.jmf)|*.mxd;*.mxt;*.jmf|";
open1.Multiselect = false;
open1.Title = "打開文件";
4.2 表數(shù)據(jù)添加
添加表數(shù)據(jù)也是本系統(tǒng)的核心功能之一,將Excel表數(shù)據(jù)轉(zhuǎn)換為shapefile格式的空間點(diǎn)數(shù)據(jù),并添加到MapControl中作為統(tǒng)計(jì)點(diǎn)數(shù)據(jù)用于后續(xù)統(tǒng)計(jì)查詢。通過menuStrip菜單欄上的“文件”-“導(dǎo)入表數(shù)據(jù)”,打開導(dǎo)入表數(shù)據(jù)的彈框,在“選擇數(shù)據(jù)源”中選中“樣例.xls”文件;在“選擇X/Y坐標(biāo)數(shù)據(jù)”中,X坐標(biāo)選擇WEITING_poi_x(經(jīng)度),Y坐標(biāo)選擇WEITING_poi_y(緯度);在“選擇投影圖層”中,選中CGCS2000坐標(biāo)系;在“選擇輸出路徑”中,選擇保存路徑即可。添加表數(shù)據(jù)界面如圖5所示。
此時(shí)可得到新的結(jié)果,將溫州市的柵格圖層去掉,得到新的溫州市鹿城區(qū)違停數(shù)據(jù)矢量圖。如圖6所示,圖中紫色點(diǎn)為歷史違停數(shù)據(jù),綠色點(diǎn)為新增違停樣例數(shù)據(jù)(彩圖見封二)。
導(dǎo)入數(shù)據(jù)窗體功能的實(shí)現(xiàn)分為3部分。第一部分為表數(shù)據(jù)選擇,單擊窗體上的“打開數(shù)據(jù)”按鈕,激活系統(tǒng)窗口選擇Excel文件,并讀取其sheet數(shù)據(jù)和每一欄標(biāo)題數(shù)據(jù)。關(guān)鍵代碼如下:
OpenFileDialog file = new OpenFileDialog();
string[] SheetName;
file.Filter = "Excel03文件(*.xls)|*.xls|文本文件(*.txt)|*.txt";
file.Title = "選擇數(shù)據(jù)表";
file.RestoreDirectory = true;
if (file.ShowDialog() == DialogResult.OK)
{
sheetcmbx.Items.Clear();
path.Text = @file.FileName;
if (System.IO.Path.GetExtension(file.FileName) == ".xls")