本篇用以記錄安裝部署發佈海圖服務所需環境、發佈海圖服務、訪問海圖服務等操作過程。
安裝部署
如果是內網(我這裏的機器環境就是內網),首先按照鏈接中的介紹進行設置https://blog.csdn.net/gislaozhang/article/details/103700327
運行Maritime Charting 安裝包,這邊採用的10.7.1版本,安裝介質形如下圖:
這個安裝也沒什麼問題,按照嚮導一步一步安裝就行了。安裝完後並不會有什麼彈出框之類的。授權Maritime功能之後,就需要重啓ArcGIS Server 後臺服務。
接下來就是關鍵步驟了,需要將Maritime 配置到ArcGIS Server中。這一步只能通過ArcGIS Server Manager 來完成。ArcGIS Maritime 是Server 的一個SOE 擴展,其擴展的SOE程序是隨着安裝文件安裝到C:\Program Files\ArcGIS\MaritimeServer\Server10.7\Bin 目錄下(這是我這邊默認安裝的路徑),而在Bin目錄下存在兩個文件,這兩個文件基本上就是Maritime Server 的核心,一是MaritimeServer.soe ,另一個是mcstpk.exe, 如下圖所示
MaritimeServer.soe 就是ArcGIS Server 的海圖擴展工具,需要在ArcGIS Server Manager 中註冊;mcstpk.exe是海圖切片包製作工具。
利用瀏覽器打開ArcGIS Server manager ,在【站點】標籤,選擇【擴展】,點擊【添加擴展】按鈕,之後在Bin目錄中指向 MaritimeServer.soe 文件,配置成功之後就會顯示已經註冊的SOE組件,如下圖所示:
接下來就是配置Maritime自身的目錄結構。Maritime不像ArcGIS Server 那樣安裝完成後通過manager自動去配置其目錄結構,它是需要手動配置。好在其目錄結構隨着Martime安裝已經拷貝到對應的目錄。其目錄在C:\Program Files\ArcGIS\MaritimeServer\Server10.7 下的maritimechartservice 文件夾
配置方法很簡單,在ArcGIS Server 的配置目錄,就是ArcGIS Server 安裝結束後的配置站點的目錄,例如我這邊將其設置爲 C:\arcgisserver 。在C:\arcgisserver\directories 目錄下,創建一個名爲 maritimeserver 的文件夾,
然後 到 Maritime 的安裝目錄,將整個 maritimechartservice 文件夾複製到 C:\arcgisserver\directories\maritimeserver目錄下,如下圖所示
圖中的這四個目錄分別用來存放Maritime 的配置文件、S57數據、日誌文件、海圖服務臨時文件 。
發佈海圖服務
配置完成之後,發佈電子海圖服務就非常簡單了。只需要將.000文件(也可以包含增量文件.001 .002等)拷貝到datasets 目錄下,就完成了發佈前的數據準備。如下圖所示:
電子海圖服務在ArcGIS Server 中還需要依賴其他的地圖服務,只要發佈一個座標系爲WGS84的地圖服務進行輔助即可。這裏我直接採用ArcGIS Server 站點配置時保留的一個地圖服務作爲例子。登錄到ArcGIS Server Manager ,選中SampleWorldCities服務進行編輯,在【功能】標籤頁下,可以找到Maritime Chart Service 選項,將其勾選。如下圖所示:
將頁面拖動到底部,查看其服務功能默認設置的信息,如下圖:
可以看到紅色框部分設置的就是前面Maritime手動配置的目錄。因爲它默認放在C:\arcgisserver\directories\maritimeserver 目錄下,所以我也是根據它的配置將其配置目錄放在對應的位置。
當然這個目錄路徑也是可以修改的,但是修改成其他目錄位置,修改後的目錄必須具備arcgis server 對應的操作系統用戶完全控制的權限,不然Maritime將無法通過頁面端訪問到該目錄下的資源。
設置好這些參數之後,點擊保存服務並重啓該地圖服務,那就完成了對海圖服務的發佈。如果數據發佈成功,會在其工作目錄 C:\arcgisserver\directories\maritimeserver\maritimechartservice\sencs 下,找到很多與海圖數據文件對應的一些 .senc 文件,如下圖所示:
訪問服務
服務的訪問,可以通過一般的rest服務方式進行訪問,但前提是先要訪問到海圖服務發佈綁定的地圖服務上,例如之前綁定的是SampleWorldCities 服務,通過本機訪問地址爲 https://localhost:6443/arcgis/rest/services/SampleWorldCities/MapServer ,在頁面最底下,可以看到Maritime 服務的選項,如下圖:
點擊進去之後,可以看到存在三種協議的形式進行訪問。如下圖:
可以看出,Esri還是比較開放的,除了使用自家的MapService之外,還提供WMS等方式進行發佈。也就是說,在開發使用上,不一定要使用ArcGIS JavaScript API,使用Leaflet或者OpenLayers 都沒有任何問題。
接下來使用ArcGIS JavaScript API 進行連接測試,其代碼如下,將海圖服務作爲一個普通的專題服務進行加載即可。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<title>4加載海圖</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="http://192.168.0.160/arcgis_js_api\library\4.14\esri\themes\light\main.css" />
<script src="http://192.168.0.160/arcgis_js_api\library\4.14\init.js"></script>
<script>
require(["esri/Map", "esri/views/MapView", "esri/layers/MapImageLayer"], function (Map, MapView, MapImageLayer) {
var map = new Map();
var view = new MapView({
container: "viewDiv",
map: map
});
var url1 = "https://192.168.0.160:6443/arcgis/rest/services/SampleWorldCities/MapServer";
var url2 = "https://192.168.0.160:6443/arcgis/rest/services/SampleWorldCities/MapServer/exts/MaritimeChartService/MapServer";
var layer1 = new MapImageLayer(url1);
var layer2 = new MapImageLayer(url2);
map.add(layer1);
map.add(layer2);
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
上述代碼是js API 4.x,代碼中arcgis_js_api\library\4.14\esri\themes\light\main.css和arcgis_js_api\library\4.14\init.js文件都是在IIS中對應的目錄(C:\inetpub\wwwroot)下存放,可以靈活的將其更改爲自己機器上main.css和init.js文件的存放路徑。
如果你機器server是js api3.x,可以直接使用下述js api 3.x訪問海圖服務的代碼:
補充:最近發現比較坑的是如果您的ArcGIS Server是10.4.1 ,運用鏈接中(https://blog.csdn.net/liyuanxiang1984/article/details/79854230)的腳本會出現地圖服務壓蓋海圖服務,導致海圖服務不顯示的情況,只能通過註釋掉添加地圖服務,只添加海圖服務的方式,才能讓海圖服務顯示,但是在ArcGIS Server更高版本,例如:ArcGIS Server10.7.1就不會出現這個情況。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" />
<title>3加載海圖</title>
<link rel="stylesheet" href="http://192.168.0.160/arcgis_js_v324_api/arcgis_js_api/library/3.24/3.24/esri/css/esri.css">
<style>
html,
body,
#map {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script src="http://192.168.0.160/arcgis_js_v324_api/arcgis_js_api/library/3.24/3.24/init.js"></script>
<script>
var map;
require(["esri/map", "esri/layers/ArcGISDynamicMapServiceLayer", "dojo/domReady!"], function (Map, DynamicLayer) {
map = new Map("map");
// var basemap = new DynamicLayer("http://192.168.0.160:6080/arcgis/rest/services/SampleWorldCities/MapServer");
// map.addLayer(basemap);
var enc84 = new DynamicLayer("http://192.168.0.160:6080/arcgis/rest/services/SampleWorldCities/MapServer/exts/Maritime%20Chart%20Service/MapServer");
map.addLayer(enc84, 1);
});
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
將代碼文件(例如:maritime.html)拷貝到C:\inetpub\wwwroot路徑下,
然後在瀏覽器端輸入http://localhost/maritime.html。其效果如下圖,已經完全按照S52的方式顯示對應的物標。
參考資料:
https://blog.csdn.net/liyuanxiang1984/category_9274668.html
https://blog.csdn.net/liyuanxiang1984/article/details/77853848