WebGIS 將 GIS 功能透過 Web 發布,核心流程:**Web 頁面請求 → Web Server → GIS 應用伺服器 (Render 地圖/查詢) → 回傳圖片/資料 → 瀏覽器顯示**。本文以 .NET Remoting + SuperMap Objects 實作簡易 WebGIS,從縱剖面完整展示 GIS 應用伺服器設計、組件封裝、效能關鍵與擴展策略。

| 模式 | 適用性 | 本專案選擇 |
|---|---|---|
| Singleton (單例) | 共享狀態、昂貴資源 (地圖控件、資料庫連線池) | ✅ GIS 核心服務:單例維護地圖圖層集合、渲染引擎 |
| Client-Activated (CAO) | 每用戶獨立狀態、工作階段資料 | ✅ 用戶專屬查詢會話、臨時圖層 |
| SingleCall | 無狀態、輕量運算 | ⚠️ 簡單屬性查詢可用,但地圖渲染需重用資源 |
public interface IGisService
{
byte[] RenderMap(MapRenderRequest request); // 回傳 PNG/JPG 位元組
FeatureSet Query(QueryRequest request); // 空間/屬性查詢
ThematicMapResult CreateThematicMap(ThematicRequest request);
void AddLayer(LayerInfo layer); // 動態加圖層
void RemoveLayer(string layerName);
}
MapControl / Map:地圖容器、圖層管理、渲染引擎。Workspace / WorkspaceConnectionInfo:工作空間連線 (資料來源)。DatasetVector / Recordset:向量資料集、查詢結果集。Theme / ThemeUnique / ThemeGraduated:專題圖主題 (單值、分級)。MapControl.GetImage() 直接輸出 Bitmap → MemoryStream → byte[],避免落地檔案 I/O。Task.Run + 回調/輪詢,避免阻塞 Remoting 執行緒池。| 時代 | 通訊技術 | 部署模式 | 現代替代 |
|---|---|---|---|
| 2005-2010 | .NET Remoting (TCP/HTTP Channel) | 單機/雙機熱備 | — |
| 2010-2018 | WCF (netTcpBinding, wsHttpBinding) | 叢集、負載平衡 | gRPC / Web API |
| 2018-現在 | ASP.NET Core Web API / gRPC | 容器化 (Docker/K8s)、微服務 | — |
**遷移路徑**:介面不變 → 實作類別改注入 HttpClient/GrpcChannel → 註冊至 DI 容器 → 部署為獨立微服務 (GIS Rendering Service)。
WebGIS 核心在 **GIS 應用伺服器的 Render 效能與並發能力**。.NET Remoting + SuperMap Objects 年代雖已遠去,但「介面抽象、單例重用昂貴資源、渲染管線最佳化、無狀態水平擴展」的架構智慧永不過時。現代 WebGIS 以 **OGC 標準 (WMS/WFS/WCS)、矢量瓦片 (MVT)、WebGL 渲染 (Mapbox GL, Cesium)、雲原生部署** 為主流,核心挑戰依然是:**海量空間資料的即時渲染與查詢**。