說句題外話,前段時期生了大病,險些就與世長辭,修養了3個多月終于基本恢復。這里希望各位程序猿工作之余還是要保存身體,活著才能繼續革命不是。
??言歸正傳,近來有幾個項目是要做專題圖相關的項目。為提高效率,公司考慮使用 OneMap 作為基礎框架進行快速開發。OneMap 是捷泰天域(Esri 在天朝的戰略合作伙伴)的產品之一,是基于服務器 GIS 的軟件產品,面向各行業提供多源異構空間信息服務資源整合、管理、安全監控與運維保障一體化的專業解決方案。OneMap產品包含平臺 管理系統、資源服務中心、地圖應用模板等不同的產品組件,還包括可選的公交換乘擴展模塊(產品官網上照搬的,其實我表示一臉懵逼,哈哈哈)。
??經過幾次安裝部署發現其中還遇到了不少坑,捷泰天域的官方安裝部署手冊中很多都寫的太籠統。里面的原因有我對 GIS 開發其實也是不熟悉(以前更多就是用了高德百度地圖 API),還有就是 GIS 這塊的東西在國內資源還是比較難查,鑒于此情,寫下學習過程中遇到的問題,以備以后查看。
1. 安裝環境準備
這里我使用了2個虛擬機來分別存放數據和部署一下應用,是為了通過虛擬機的快照功能,快速恢復某一個的狀態,避免玩崩了重裝軟件等麻煩事。
??我的系統環境和安裝的必要程序如下:
- 數據服務器(虛擬機,網絡使用橋接方式)
系統:Windows Server 2012 R2 64位;
其它:Oralce11gR2 數據庫。 - 應用服務器(虛擬機,網絡使用橋接方式)
系統:Windows Server 2012 R2 64位;
其它:ArcGIS Server 10.5,Oralce11g 客戶端 64位,準備工作完成后 OneMap 將安裝到該主機。 - 本機
系統:Windows 10 專業版 64位;
其它:ArcGIS Desktop 10.5,Oracle11g 客戶端 32位。
注意事項:
- 本文所用的截圖為我這幾次在不同環境下安裝 OneMap 時為截圖,圖片內的部分版本號和日期并不一定對應,但并不影響安裝的步驟和流程;
- 所有安裝 ArcGIS 相關產品的主機都要預先安裝 .NET Framework 3.5;
- 所有主機的機器名最好都為字母和數字組合,如果不是則最好在安裝前更改機器名,不要帶 "-” 和 "_" ,以免在安裝部署 ActiveMQ(OneMap 需用到,MQ 在機器名為上述符號時有時啟動會報異常)和 ArcGIS(不能使用 "_") 時發生異常;
- 由于 ArcGIS Server 是 64位的程序,所以 Oracle 客戶端也必須安裝 64位的并配置好環境變量,而 Desktop 是 32位的程序,所以 Oracle 客戶端需要安裝 32位。如果 Server 和 Desktop 安裝在一個主機環境下,則 32位和64位的 Oracle 客戶端都需要安裝(詳細 Arcgis 安裝可以查閱 Esri 官方網站的安裝說明手冊)。
- Oracle 數據庫的字符集要設置為 ZHS16GBK,為避免意外,最好實例名使用默認的 orcl;
-
需要修改 Oralce 的監聽器中的地址為機器名,否則 ArcGIS 和數據庫進行連接建立地理信息基礎數據庫時會出錯,如下圖所示:
1.png
解決方案:
- 打開 Oracle 的 Net Manager 程序
- 如下圖所示,將監聽中的主機名改為當前主機的機器名(默認是 localhost)
- 查看 ORACLE_HOME/NETWORK/ADMIN/listener.ora 里的監聽名稱是否已改為當前主機機器名
- 修改 tnsnames.ora 里的主機地址為當前主機的機器名,并將修改好的 tnsnames.ora 文件復制到所有客戶端下的相同位置(如客戶端目錄下 NETWORK/ADMIN 文件夾不存在則創建),然后重啟 Oracle 服務。
2. 注冊 SDE 服務
2.1 在 Oracle 數據庫中創建 sde 賬戶
此賬戶主要用于 ArcGIS 連接訪問 Oracle 數據庫。
- 打開 ArcGIS Desktop 中的 ArcMap 程序,在右側 Catalog 工具欄窗口中按照 Toolboxes\System Toolboxes\Data Management Tools.tbx\Geodatabase Administration\ 的目錄找到并打開 Create Enterprise Geodatabase,如下圖所示:
在 Create Enterprise Geodatabase 窗口中填寫數據庫實例、用戶密碼等信息,點擊 OK,如下圖所示:
創建 sde 用戶成功后,會顯示如下信息:
登錄 Oracle11g 控制臺可以看到通過 ArcCatalog 工具創建的 sde 表空間和用戶
2.2 在 ArcGIS Server 中注冊 Oracle 數據庫
在注冊之前,如果 ArcGIS Server 尚為建立站點的話,需先行建立一個站點。建立站點本文不做描述,具體步驟可以查閱 Esri 的官方說明文檔。
??注冊數據庫可以通過兩種方式,一種通過 ArcMap 來注冊,一種是通過訪問 ArcGIS Server 的管理后臺( http://主機名:6080/arcgis/manager )來注冊,這里我的是通過 ArcMap 的方式來完成此步驟。具體流程為:
- 在 Catalog 工具欄窗口中 Database Connections 項中找到并打開 Add Database Connection,使用剛才建立的 sde 用戶來建立與數據庫的連接,成功后會生成一個 .sde 文件,如下圖所示:
- 右鍵生成的 .sde 文件,點擊 properties,可以找到 sde 文件的物理位置,以備之后使用
- 在 Catalog 工具欄窗口中 GIS Servers 項中找到并打開 Add ArcGIS Server,建立與 Server 的連接,如下圖所示:
- 選擇建立一個管理端的 GIS 服務連接
- 填寫 Server 的地址和站點管理員和密碼
- 連接成功后可以在 GIS Servers 項下看到連接的項,如圖所示:
- 在建立的 Server 連接上右鍵點擊 Server Properties... 項,選擇注冊托管數據庫,具體操作如圖所示:
- 填寫注冊數據庫的名稱,點擊 Import 按鈕導入之前生成好的 .sde 文件
- 注冊成功后,如下圖所示:
注意事項
- 如果未安裝 .NET Framework 3.5 此步驟可能會報如下圖異常(此圖為我之前用訪問 Server 管理平臺注冊數據庫時遇到此問題時的截圖)
- 由于 OneMap 還未安裝,故文件夾等之后再注冊。
3. 發布要素服務
此服務主要是用于 OneMap 的擴展權限功能。
- 在之前 Database Connection 項下建立的 sde 連接上右鍵 New > Feature Class 打開要素服務窗口,并按照官方說明手冊要求填寫名稱、坐標系等信息,具體參數設置請參照官方手冊,本文就不再進行說明。大體流程如圖所示:
- 完成后在左側窗口中就可以看到添加好的數據,根據手冊做相應配置后保存
而后選擇左側窗口中的數據,點擊菜單欄 File > Share As > Service... 開始發布服務
- 選擇 Server 服務和填寫圖層服務名稱
- 參數設置完成后,點擊右上角的 Publish 進行服務發布
- 發布成功后,可以登錄 ArcGIS Server 的管理平臺,可以看到剛剛發布的服務
- 至此 OneMap 安裝前的準備工作就全部完成。
4. 安裝和配置 OneMap
詳細的安裝流程請參照 OneMap 官方安裝部署手冊進行,本文只著重說明下其中的關鍵步驟。
4.1. 向數據庫中導入 OneMap 的用戶、庫表結構和數據
- 運行安裝程序,點擊創建。而后填寫數據庫的連接信息,開始導入數據
4.2. 安裝 OneMap 主程序
- 運行安裝程序,點擊安裝開始進行安裝,盡量不要改動其安裝路徑,避免將來遇到未知的錯誤
- 安裝完成后,會彈出參數配置窗口,如下圖所示:
- 這里需要注意的是,上圖中藍框的部分為數據庫的配置,主機地址需要填寫 Oracle 數據庫所在主機的機器名或 IP。綠框的部分為 ArcGIS Server 的配置,主機地址需要填寫 Server 所在主機的機器名或 IP。金黃色框的部分為 OneMap 的配置,主機地址需要填寫 OneMap 所在主機的機器名或 IP。
- 之后在安裝程序主界面點擊授權,導入授權文件即可激活 OneMap。
- 安裝 OneMap 主程序完成后,還需要在 ArcGIS Server 中注冊 OneMap 的共享文件夾。首先先要設置 OneMap 所在主機的 C:\OneMap\temp\upload 文件夾為共享文件夾,并且 ArcGIS 的賬戶,默認為 arcgis 擁有權限,這里為了方便,直接向所有用戶開放了權限。如圖所示:
4.2 根據 OneMap 的部署要求配置 ArcGIS Server
- 將 C:\OneMap\extension\ArcGIS 文件夾下的 11個 jar 包服務到 ArcGIS Server 安裝目錄下的
framework\lib\server 文件夾下。
- 編輯 C:\OneMap\extension\ArcGIS 目錄下的 proxool.xml 修改數據庫主機地址為當前數據庫所在主機的地址。并將修改好的 proxool.xml 文件復制到 ArcGIS Server 的工作文件夾中(默認為 C:\arcgisserver),本文是將文件復制到 C:\arcgisserver\oracle 文件夾下,并設置 oracle 文件夾為共享,以確保 proxool.xml 為共享文件,然后重啟 Server 的服務 。
- 登錄 ArcGIS Server 后臺管理系統(主機名:6080/arcgis/admin),登錄后,按照 security > config > Update Identity Store 的路徑打開更新身份存儲窗口。
- 將下圖中的配置數據,填寫到 User Store Configuration 和 Role Store Configuration 項中,紅框的路徑要設置為之前設置的共享文件位置。
- 填寫完畢后,點擊更新,成功則顯示如下信息:
- 按照 security > users > getUsers 的路徑打開窗口。然后和數據庫中的對應表中的用戶名是否一致。
4.3 為 Server 配置 OneMap 本地發布的 js 庫
- 在 Server 根路徑下找到 framework\runtime\tomcat\webapps\arcgis#rest\WEB-INF\classes\resources\rest-config.properties 配置文件并打開。將其中的 js 資源路徑替換為 OneMap 發布的資源路徑。
- 注:如果 classes 文件夾下是空的,可以用壓縮工具打開 arcgis#rest\WEB-INF\lib\rest-10.4.1.5686.jar 包。提取 jar 里的 rest-config.properties 文件,修改保存后放置到文檔要求的位置。 (不過這里有個疑問,官方手冊匹配 ArcGIS 版本是10.1/10.2/10.3,我發現 10.4.1 版本的 rest-10.4.1.5686.jar 中的配置文件是放在根路徑下,而并非是在 resources 包下,發布后應該也是在 classes 而不是 處理 classes/resources 下,具體等有時間了再進行測試)。
- 登錄 ArcGIS Server 管理后臺(Server 主機名:6080/arcgis/admin),按照 system > handlers > rest > servicesdirectory 的路徑打開窗口。修改 js 相關地址為 OneMap 發布的資源地址并保存。
- 登錄 ArcGIS Server Manager,在安全性功能下編輯令牌信息,默認:geoshare
4.4 啟動 OneMap 服務
- 使用 OneMap 啟動服務快捷方式啟動所有服務。
- 如果出現 “拒絕訪問” 的錯誤,可以使用管理員權限來執行此腳本程序。
- 打開服務管理器,確認 OneMap 的 4 個服務是否已全部開啟。
5. 訪問和初步配置 OneMap
5.1. 各系統訪問地址
主要包含 4 個系統:
- OneMap 資源服務中心(門戶系統),URL:http://主機名:8080/Portal;
- OneMap 捷泰天域平臺管理系統(運維系統),URL:http://主機名:8080/GeoShareManager;
- OneMap 服務目錄(服務系統),URL:http://主機名:8080/OneMapServer/rest/services;
- OneMap 用戶信息安全加密服務系統(Token系統),URL:http://主機名:8080/RemoteTokenServer;
5.2. 配置服務引擎
- 登錄運維系統,按照“系統配置” > “服務引擎配置” 進入引擎配置頁面。按照自己的安裝部署環境和需要配置 Server 引擎、OneMap 服務引擎、代理和令牌引擎。
5.3. 平臺監控配置
- 打開“系統配置” > “平臺監控配置”,有集群(選組織)、單機(選服務器)兩種方式進行配置,這里用服務器的方式進行配置。
5.4. 日志系統配置
- 打開“系統配置” > “日志收割”,修改服務器的 IP 為部署 OneMap 的主機 IP,并保存。
- 點擊遠端配置按鈕(下圖紅圈處),修改“訪問賬號”的綁定 IP 為部署 OneMap 的主機 IP。
6. 服務測試
至此 OneMap 全部安裝和部署工作已全部完成。現在就就發布一組測試數據看看是否可以成功。
登錄運維系統,打開“服務管理” > “本地服務發布”。這里我發布了 OneMap 在安裝包中提供的示例中國行政區劃圖的 .sd 文件。
- 發布成功后,在“服務平臺管理”中可以看到剛才發布的圖層。
- 下圖為把圖層加載到 ArcGIS Online map viewer 中顯示的效果。
- 注:OneMap 安裝時會把系統的環境變量中 JDK 等路徑設置為他自帶的 JDK 1.6 的路徑。從而影響系統里其他需要 1.7 和以上版本 JDK 的程序。有需要的或者有強迫癥的,可以把 “C:\OneMap\Tomcat\bin\setclasspath.bat”、“C:\OneMap\services\activemq5.4.1\bin\activemq.bat”、“C:\OneMap\services\activemq5.4.1\bin\activemq-admin.bat” 中加上指定 JDK 的語句,然后把環境變量里的設置改回原來的即可。