2-1 第一個2D網頁程式


[info] 小提示:

程式碼連結:我是連結


2D網頁程式將使用 pilotgaea-mapclient.js 來介接 MapServer 所發布的圖資,本章將帶您快速建構一個2D Web圖台。

步驟1. 首先,請用記事本或是任一個支援網頁編寫的編譯軟體建立一個html網頁檔,建立後應會如以下所示
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
    </body>
</html>
步驟2. 請在<head>裡加上程式碼設定使用pilotgaea-mapclient.js
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="pilotgaea-mapclient.js"></script>
</head>

pilotgaea-mapclient.js 為 MapServer 提供之預設 JavaScript library,能用來介接 MapServer 所發佈的2D圖資,此檔案位於 MapServer 安裝目錄C:\Program Files\PilotGaea\TileMap\js的路徑下。請將此檔案複製至網頁之目錄下,或自行修改引用之src路徑。

在 pilotgaea-mapclient.js 中,我們使用了 NewTileMapLayerByPatternName 及 NewTileMapLayerFromPilotGaea。
NewTileMapLayerByPatternName 為加入 PilotGaea 內建支援的外部服務圖層;NewTileMapLayerFromPilotGaea 為用 PilotGaea 習慣的方式給 WMTS 參數,非 PG MapServer 也 許無法正常取到圖。
NewTileMapLayerFromPilotGaea 可以直接從 PilotGaea O'view MapServer 中取得圖層資料並應用,不需要再透過其他介接方式增加操作複雜度。
關於 NewTileMapLayerByPatternName 及 NewTileMapLayerFromPilotGaea 更詳細的資料可參閱Reference

[info] 小提示:

若為32位元版安裝目錄則是在C:\Program Files(x86)\PilotGaea\TileMap\js

步驟3. 在<body>加入一個<div>並設定大小,作為地圖在網頁上顯示的範圍,並加入一個<script>用來設定地圖的連接與屬性
<body>
    <div id="MyMap" style="width: 100%;height: 100%;position: absolute;top: 0;"></div>
    <script type="text/javascript"></script>
</body>
步驟4. 初始化地圖,坐標系選擇圖磚常用的EPSG:3857,與OpenStreetMap相同,這裡開始使用pilotgaea-mapclient.js的API,詳細的使用方法與參數設定請參閱安裝目錄下\[Document\]中的\[js2d\]
<script type="text/javascript">
    var mapView = new CMapView('MyMap', 3857);
    var mapDoc = new CMapDocument(3857);
    var m = CMatrixSet.MakeByEPSG(3857);
</script>

[warning] 注意事項:

地圖名稱須與div的id相同,在本範例中使用的是「MyMap」。

步驟5. 為了能順利連線,必須使用MapServer所發佈的Url,所以請開啟PGMapServer.exe,開啟後會如下圖所示

[warning] 注意事項:

若是初次啟動,請參閱Map_Server_Manual,並照著文件指示之方法設定 MapServer 與圖層。

OViewOverview

找到Url與圖層名稱後就可以在剛剛所撰寫的<script>中加入程式碼設定連接伺服器所發佈的圖層:

var host = "http://127.0.0.1:8080/wmts?"; 
// 以本機MapServer為例。
var layerName = "範例影像圖層";  // 圖層在伺服器上的名稱。
var wmtsUrl = host + "Layer=" + layerName + "&style=default&TileMatrixSet=EPSG:3857&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix={TileZ}&TileCol={TileC}&TileRow={TileR}";
// ※此連線字串實際沒有空白與換行分隔
// 由於本產品有提供標準的 WMTS 服務,可以使用標準的 WMTS Pattern。
var Patterns = [wmtsUrl];  
// 支援多組 WMTS Pattern,只有一組亦可使用。

OViewOverview

TileMatrixSet 是 OGC WMTS 規範中的概念,類似於 Tiling Schema。該值必須是 WMTS 服務元數據(GetCapabilities 響應)中公佈的其中一個 TileMatrixSet 的標識符,其中包括眾所周知的 TileMatrixSet,例如:Google 地圖、ArcGIS Online,或者由服務發布者定義的自定義 TileMatrixSet 。
由附圖程式碼可知 {TileZ} = TileMatrix,即為圖磚陣列,是由一群具有相同比例尺的圖磚所構成之集合。每個圖磚可由行及列編號進行唯一識別。
由附圖程式碼可知 {TileC} = TileColumnCount,即為TileMatrix中的列編號。
由附圖程式碼可知 {TileR} = TileRowCount,即為TileMatrix中的行編號。

步驟6. 最後設定把圖層加入網頁顯示,一樣是寫在<script>
var im = mapDoc.NewTileMapLayerByMatrixSet("自訂圖層名稱", Patterns, m, -1);
// 加入圖層
mapView.Bind(mapDoc, null); 
// 將可視元件與地圖文件綁定,範圍設定為null,代表系統預設,
// 會使用EPSG:3857的範圍(全球)
步驟7. 現在,您已完成2D Web圖台,您最後的程式碼應如下

[warning] 注意事項:

此處圖資使用 NLSC WMTS 服務。如若使用自訂圖層,應會顯示自訂之圖層。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <script src="/js/pilotgaea-mapclient.js"></script>
        <title></title>
    </head>
    <body>
        <div id="MyMap" style="width: 100%;height: 100%;position: absolute;top: 0;"></div>
        <script type="text/javascript">
            var mapView = new CMapView('MyMap', 3857);
            var mapDoc = new CMapDocument(3857);
            var m = CMatrixSet.MakeByEPSG(3857); 
            //指定圖磚的坐標規則,需與URL中的TileMatrixSet相同
            var Patterns = [];
            Patterns[0] = "https://wmts.nlsc.gov.tw/wmts/EMAP/default/GoogleMapsCompatible/{TileZ}/{TileR}/{TileC}";
            var im = mapDoc.NewTileMapLayerByMatrixSet("EMAP", Patterns, m, -1);
            mapView.Bind(mapDoc, null);
        </script>
    </body>
</html>
Copyright © PilotGaea 2022 Version:13.0 all right reserved,powered by Gitbook修訂時間: 2024-01-31 10:32:14