官术网_书友最值得收藏!

1.5.2 實(shí)現(xiàn)第一個(gè)WebGIS后臺(tái)REST服務(wù)接口

在創(chuàng)建后臺(tái)REST服務(wù)接口之前,首先創(chuàng)建一個(gè)名為“WCFService+OpenLayer+ECharts”的文件夾;接著在該文件夾下創(chuàng)建一個(gè)app文件夾;然后在app文件夾下分別創(chuàng)建data_shp文件夾和lib文件夾,lib文件夾用于存放項(xiàng)目中需要引用的本地資源;最后在lib文件夾中創(chuàng)建ECharts文件夾、jQuery文件夾、OpenLayers文件夾,將下載的ECharts文件、jQuery文件和OpenLayers文件分別放在所對(duì)應(yīng)的文件夾中。自定義的目錄如圖1-5所示,項(xiàng)目的目錄結(jié)構(gòu)也可以根據(jù)個(gè)人的習(xí)慣來定義。

img

圖1-5 自定義的目錄

在開發(fā)Web系統(tǒng)時(shí),會(huì)經(jīng)常出現(xiàn)跨域問題。跨域問題是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,這是由瀏覽器的同源(是指協(xié)議、域名、端口三者相同)策略造成的,是瀏覽器對(duì)JavaScript施加的安全限制。由于存在跨域問題,使得AJAX請(qǐng)求無法發(fā)送,所以需要調(diào)用編寫的ResponseMsgFactory.cs來解決該問題。首先將ResponseMsgFactory.cs放到WCFService文件夾下;然后在Visual Studio 2012中右鍵單擊項(xiàng)目名稱“WCFService”,在彈出的右鍵菜單中依次選擇“現(xiàn)有項(xiàng)”→“添加”,將ResponseMsgFactory.cs添加到項(xiàng)目中,如1-6所示。

img

圖1-6 添加現(xiàn)有項(xiàng)

通過調(diào)用ResponseMsgFactory.cs中ProcessHttpOPTIONS方法,可判斷服務(wù)器接收到的是不是OPTIONS請(qǐng)求,如果是,則返回服務(wù)器信息,并通過ResponseMsgFactory類獲得指定格式的數(shù)據(jù),調(diào)用代碼如程序代碼1-3所示。ResponseMsgFactory.cs中ProcessHttpOPTIONS方法的具體實(shí)現(xiàn)如程序代碼1-4所示。

程序代碼1-3 調(diào)用ProcessHttpOPTIONS方法

img

程序代碼1-4 ProcessHttpOPTIONS方法的實(shí)現(xiàn)

img

由于本書需要調(diào)用ArcGIS數(shù)據(jù)庫來存儲(chǔ)后臺(tái)所使用的疫情數(shù)據(jù),因此后臺(tái)需要獲得ArcGIS數(shù)據(jù)庫的許可,這可以通過調(diào)用InitializePlatform.cs中的InitializeApplication方法來實(shí)現(xiàn)。添加InitializePlatform.cs中的方法同添加ResponseMsgFactory.cs中的方法一樣,調(diào)用代碼如程序代碼1-5所示。InitializePlatform.cs中InitializeApplication方法的具體實(shí)現(xiàn)如程序代碼1-6所示。

程序代碼1-5 調(diào)用InitializeApplication方法

img

程序代碼1-6 InitializeApplication方法的實(shí)現(xiàn)

img

為了方便后臺(tái)讀取ArcGIS中shp文件的屬性表數(shù)據(jù),可以通過引用ArcGIS中的部分動(dòng)態(tài)鏈接庫文件來調(diào)用ArcGIS中的查詢方法,從而獲得shp文件的屬性表數(shù)據(jù)。想要獲得動(dòng)態(tài)鏈接庫文件,首先要在ArcGIS安裝包中,找到并單擊SDK_dotnet文件夾,接著雙擊setup.exe,然后一直單擊“Next”按鈕,安裝完成后,可在“%ArcGIS%\DeveloperKit10.2\DotNet”下找到本書使用的動(dòng)態(tài)鏈接庫文件,將這些動(dòng)態(tài)鏈接庫文件放到項(xiàng)目的“bin”文件夾下的“Debug”文件夾中,最后在Visual Studio 2012中右鍵單擊項(xiàng)目名稱“WCFService”,在彈出的右鍵菜單中依次選擇“添加引用”→“瀏覽”,可將“Debug”文件夾下的動(dòng)態(tài)鏈接庫文件添加到項(xiàng)目中,如圖1-7所示。

img

圖1-7 在項(xiàng)目中添加動(dòng)態(tài)鏈接庫文件

通過ServiceBehavior中的一些屬性可以控制服務(wù)的實(shí)例、線程等。其中InstanceContextMode用于設(shè)置服務(wù)實(shí)例的生命周期,其值是Single;ConcurrencyMode用于設(shè)置服務(wù)以單線程模式運(yùn)行,其值是Single。如果要把未處理的異常作為SOAP錯(cuò)誤消息發(fā)送給客戶端,就需要把IncludeExceptionDetailInFaults設(shè)置為true。AspNetCompatibilityRequirements用于啟用ASP.NET兼容性模式,如程序代碼1-7所示。

程序代碼1-7 設(shè)置ServiceBehavior屬性

img

接下來設(shè)置疫情數(shù)據(jù)存儲(chǔ)的路徑,即“path=@"..\..\..\data_shp"”,該路徑是數(shù)據(jù)文件夾的相對(duì)路徑,每一個(gè)“..\”代表的是上一級(jí)目錄。首先調(diào)用IFeatureWorkspace接口中的OpenFromFile方法打開data_shp文件夾,再調(diào)用OpenFeatureClass方法打開該文件夾下名為HBconfirmed_0302的shp文件,讀者可以根據(jù)自身需要設(shè)置其他的shp文件名。設(shè)置shp文件所在路徑及工作空間的代碼如程序代碼1-8所示。

程序代碼1-8 設(shè)置shp文件所在路徑及工作空間

img

由于本書使用的疫情數(shù)據(jù)時(shí)間字段名中含有字母“T”,為了使后續(xù)的折線圖不出現(xiàn)“T”,需要首先調(diào)用fields.get_Field方法獲取屬性表中所有字段,然后調(diào)用get_Field方法獲得含有字母“T”的字段名,最后調(diào)用Substring方法去掉時(shí)間字段名中的字母“T”,如程序代碼1-9所示。

程序代碼1-9 獲取字段名并去掉字段名中的首字母“T”

img

處理完字段名之后,還需要調(diào)用IFeatureClass.Search方法來查詢屬性表中的字段值。“WhereClause=""”表示查詢所有的數(shù)據(jù)。IFeatureClass.Search(pQueryFilter,false)的作用是根據(jù)pQueryFilter從FeatureClass中選取特定的Feature,該方法會(huì)返回一個(gè)IFeatureCursor對(duì)象。IFeatureCursor對(duì)象用于指向被篩選出來的符合條件的Feature。IFeatureCursor.NextFeature方法將游標(biāo)指向下一個(gè)滿足條件的Feature,第一次使用該方法時(shí)會(huì)返回第一個(gè)Feature,再次調(diào)用會(huì)返回第二個(gè)Feature,最后一個(gè)要素被遍歷后再次調(diào)用該接口,則會(huì)返回null。IFeatureClass.Search方法的第二個(gè)參數(shù)設(shè)置為false,也就是說每執(zhí)行一次IFeatureClass.NextFeautre方法,上一條記錄的Feature值都會(huì)保存在內(nèi)存中,如程序代碼1-10所示。

程序代碼1-10 查詢屬性表中的字段值

img

在遍歷所有要素后,調(diào)用pFeature.get_Value方法獲取屬性表的時(shí)間字段值,如程序代碼1-11所示。

程序代碼1-11 獲取屬性表的時(shí)間字段值

img
主站蜘蛛池模板: 思南县| 邛崃市| 巩留县| 义马市| 淅川县| 藁城市| 彭水| 尼木县| 醴陵市| 郓城县| 墨玉县| 大悟县| 江阴市| 乌鲁木齐县| 娱乐| 庐江县| 昌江| 安远县| 威信县| 突泉县| 大悟县| 都安| 太仆寺旗| 南漳县| 长武县| 康保县| 晴隆县| 邻水| 石泉县| 乌鲁木齐县| 武鸣县| 宁明县| 广元市| 扶风县| 兴安县| 开化县| 淮安市| 永丰县| 行唐县| 峨眉山市| 六枝特区|