【01】發佈海圖服務

本篇用以記錄安裝部署發佈海圖服務所需環境、發佈海圖服務、訪問海圖服務等操作過程。

安裝部署

如果是內網(我這裏的機器環境就是內網),首先按照鏈接中的介紹進行設置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

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章