鐘立明,景 寧,熊 偉
(國防科技大學電子科學學院,長沙 410000)
地理信息系統(GIS)的開發與應用是近年來學術界研究的熱點,特別是Web 端的應用也是越來越廣泛,用戶只需要在瀏覽器上便可以迅速地實現瀏覽地圖、定位位置、路徑規劃、查找想知道的興趣點等等,動態交互性強,極大地方便了我們的工作和生活。另外,使用JavaScript 開發的Web 端比使用C#、ArcGIS Engine 為代表的C/S 開發更具優勢,JavaScript 可以通過HTML5輕松實現跨平臺[1],開發起來更加系統高效,可移植性好。
ArcGIS API for JavaScript 是美國Esri 公司推出的一套網頁端用戶二次開發接口[2],它是基于REST 服務接口和dojo 框架技 術 實 現 的,包 括Map、Layer、Graphic、Geometry、Point、Polyline、Polygon 等300多個類。
可以快速創建交互式地圖應用;可以調用ArcGIS Server的GP 服務,提供專業的分析結果;可以使用ArcGIS Server 的REST API,提供顯示、查詢、分析等功能;可以同時調用多個ArcGIS Server 的服務,輕松實現Mashup。
用戶通過Web 瀏覽器端發出請求(比如點擊、瀏覽操作地圖等行為),Web 瀏覽器端對JavaScript 腳本代碼解釋,通過網絡將用戶請求發送至ArcGIS Server,ArcGIS Server 對發送過來的數據進行分析處理,并按要求在數據庫中作出查詢處理,然后將查詢處理的數據結果返回至ArcGIS Server,ArcGIS Server 通過TCP/IP 協議傳遞給Web 瀏覽器,瀏覽器端將結果展現出來給用戶[3,4]。
工作原理如圖1所示。

圖1 工作原理
總體思想是:通過ArcMAP 建立地理數據庫,創建所需要的網絡數據集,利用ArcGIS Server 發布Map 服務,建立GPModel,利用ArcGIS Server 發布GPModel 服務[5],實現網絡分析功能,最后通過調用ArcGIS API for JavaScript 的有關接口,實現路徑規劃。
實現過程如圖2所示。

圖2 實現過程
ArcGIS 地理數據庫是存儲在通用文件系統文件夾或多用戶關系數據庫管理系統(DBMS)(如Oracle、Microsoft SQL Server或PostgreSQL)中的各種類型地理數據的集合。
在ArcMap 中創建地理數據庫的步驟如下:
(1)創建與數據庫的文件連接。
(2)在文件連接目錄里,創建文件地理數據庫目錄。
(3)在文件地理數據庫目錄里,導入單個或多個要素類、單個或多個表、柵格數據集。
本文使用ArcMap10.4軟件對長沙市地圖SHP(shapefile)數據建立地理數據庫。
路徑規劃是建立在網絡分析層的基礎上實現的。在ArcMap中,系統提供數據集構建向導,首先在導航數據道路層基礎上創建網絡數據集,其次在網絡數據集中創建網絡分析圖層,最后發布地圖服務。
2.2.1 創建網絡數據集
網絡數據集是由網絡元素組成。
網絡元素分為三種類型[6]:邊:網絡中必備元素。用于連接至其他元素(交匯點),也就是網絡中的線要素類。
交匯點:網絡中必備元素。用于連接邊,便于兩條邊之間的導航。
轉彎:網絡中的可選元素。用于存儲于特定轉彎移動方式有關的信息,如限制轉向。
在ArcMap 中建立網絡數據集的步驟如下:
(1)選擇地理數據庫目錄中shapefile 文件,新建網絡數據集。(2)添加新建網絡數據集名稱和要素。(3)選擇網絡連通性策略。(4)高程建模,默認即可。
最后完成網絡數據集的建立。
新建網絡數據集如圖3所示。
2.2.2 創建網絡分析圖層
網絡分析圖層主要用于存儲網絡分析過程中的輸入和輸出,網絡分析執行的對象始終是網絡數據集。

圖3 路網數據集
在ArcMap 中創建網絡分析圖層的步驟如下:(1)將新建的網絡數據集和要素類添加到地圖。(2)選擇自定義窗口工具條,激活Network Analyst 模塊。(3)新建路徑,使用創建網絡位置工具選擇2個停靠點代表起點和終點。(4)求解運算。
網絡分析圖層如圖4所示。

圖4 網絡分析圖層結果
2.2.3 發布地圖服務
地圖服務是一種利用ArcGIS 將地圖文檔作為服務發布到Server 站點上,通過Web 瀏覽器進行訪問的方法。使用ArcMap軟件,打開地圖文檔,從主菜單中選擇文件共享為服務,選擇發布服務。
地圖服務發布成功,如圖5所示。

圖5 地圖服務發布截圖
GP 全名是Geoprocessing,又叫地理處理[7,8]。在WebGIS實際開發中,盡管ArcGIS API 提供了很多接口功能,但用戶需求是多樣化的,部分需求可能在API 中沒有實現,而GP 服務剛好能夠彌補這一點。因此,可以發布GP 服務,供前端使用。
結合路徑規劃模型建立一個GPModel,如圖6所示。

圖6 GPModel
GPModel 建立后,通過編譯成功運行后,即可發布共享為地理處理服務。
Esri 公司提供在線的ArcGIS API for JavaScript,在Web 應用中可直接引用,無需下載安裝;也可以下載API,然后安裝部署到所需的Web 服務器。
ArcGIS API for JavaScript 應用程序部署的步驟是:①下載安裝。②配置IIS。打開打開控制面板-程序-打開或關閉Windows功能,勾選FTP 服務和Web 管理工具中的IIS 選項。ISS 功能打開之后,C 盤目錄下會多一個inetpub 文件夾,里面的wwwroot文件夾就是服務根目錄。③修改dojo.js 和init.js 文件的訪問路徑。④瀏覽器訪問init.js 文件測試部署是否成功。
Map 類包含儲存、管理和覆蓋視圖共有圖層的屬性和方法。通過在require()函數內部引用的esri/Map 資源來創建一個新的Map 類。
部分代碼如下:
require([ "esri/map","dojo/domReady!"],function (Map){var map = new Map("map",{basemap:"osm",});
map.centerAndZoom(new esri.geometry.Point()});
ArcGISDynamicMapServiceLayer 允許調用ArcGIS Server REST API 公開的動態地圖服務資源[9]。每次用戶請求進入時,動態地圖服務都會在服務器上生成地圖圖像。
調用動態地圖服務主要通過以下兩步實現:
一是通過地圖服務創建ArcGISDynamicMapServiceLayer 對象。
部分代碼如下:
Var dlLayer = new ArcGISDynamicMapServiceLayer(dlLayerPath)});
二是將動態地圖服務的對象添加到地圖容器中。
部分代碼如下:
require(["esri/layers/ArcGISDynamicMapServiceLayer",
"dojo/domReady!"],
Function(ArcGISDynamicMapServiceLayer){Var dlLayerPath =
http://localhost:6080/arcgis/rest/services/changsha/MapServer};
繪制主要使用Toolar 里的Draw 工具,實現的步驟如下:(1)創建繪圖對象;(2)激活繪圖工具;(3)繪制幾何圖形;(4)創建圖像;(5)加載到地圖。部分代碼如下:
require([ "esri/toolbars/draw","esri/graphic",
"esri/symbols/SimpleLineSymbol",
"esri/geometry/Polyline",
"dojo/domReady!"],
function (Draw,Graphic,SimpleLineSymbol,Color,Polyline){
map.addLayer(dlLayer);
var draw = new Draw(map);draw.on("draw-end",result);var drawqspoint = document.getElementById("drawstartpoint");
var drawjspoint = document.getElementById("draw-endpoint");var symbol1 = new esri.symbol.SimpleMarkerSymbol();var symbol2 = new esri.symbol.SimpleMarkerSymbol();}Web 瀏覽器運行效果如圖7所示。

圖7 路徑規劃截圖
本文對基于ArcGIS API for JavaScript 的路徑規劃方法實現進行了研究,結合長沙市道路地圖數據進行了Web 應用上的驗證。由于ArcGIS API for JavaScript 是在dojo 框架之上建立的[10],遵循AMD(異步模塊加載機制)規范,這種規范讓JavaScript 就像其它面向對象語言一樣,通過模塊去管理代碼,可移植性和擴展性強,后續也可以根據用戶的實際需求對ArcGIS 進行二次開發。