地圖渲染特指產生地圖映像的過程。
1、三種渲染方式
一、MapXtremeImageRenderer 遠程渲染使用 MapXtremeImageRenderer 來處理。
遠程渲染表示包含 MapJ 對象的應用程式將服從 MapXtremeServlet 的執行個體來建立地圖。MapJ 客戶
機將其請求(如何渲染和渲染什麼)發送到 MapXtremeServlet,由後者處理請求,然後將結果返回
給 MapXtremeImageRenderer.
(1)、本地系統上使用toFile()的位元影像檔案(GIF、JPEG 等)— 通常用於在中介層上儲存映像,然後
令瀏覽器從伺服器請求檔案。
(2)、使用 toStream() 的 Java 輸出資料流對象 — 流可以表示為檔案(與以上相同)或者記憶體儲存的資訊
(作為 Java 映像對象,如下);兩層結構使用 toStream,客戶機可將映像儲存在記憶體中。
(3)、使用 toImage() 的 Java 映像對象 — 將柵格儲存在記憶體中,可直接用於顯示。
由於要依賴於客戶機系統可能沒有的 JVM 和字型等系統資源,因此 MapXtremeImageRenderer 是
渲染地圖最普通的方式。
二、LocalRenderer
LocalRenderer 將地圖渲染為 Java2D Graphics2D 或 BufferedImage 對象。Graphics2D 對象通常源
自 BufferedImage 或 Swing 組件。所有的渲染均在用戶端電腦完成。由於所有渲染均在用戶端計算
機完成,渲染地圖所需資源必須駐留在用戶端電腦(字型、視訊卡等)。
三、EncodedImageRenderer
MapXtreme Java 提供特殊渲染器來協助使用者使用動畫映像建立地圖。
2、資料的輸出
一、柵格資料輸出
MapXtreme Java 支援多種柵格輸出格式,其中包括 GIF、JPEG、PNG 和 WBMP。柵格映像的輸
出格式在 ImageRequestComposer 中通過 MIME 類型指定。MIME 是一種用於映像資料等非文本數
據的格式標準。以下指南將協助您確定最適合具體需求的格式類型。
image/jpeg — JPEG — 適用於多於 256 色的圖層。
image/gif — GIF — 適用於最多 256 色的圖層。
image/png — PNG — 是 GIF 格式的替代格式,適用於多於 256 色的圖層。
image/wbmp — WBMP — 用於在類似手機和 PDA 的手持功能中產生圖形的專用格式。
image/svg+xml — SVG — 用於在 XML 中說明二維向量圖形的格式。
例如,要輸出 JPEG,可使用如下所示的 ImageRequestComposer:
ImageRequestComposer.create(mapj, maxColors, bgColor, "image/jpeg");
maxColors:低位 256
bgColor:圖片底色 Color.blue
在使用柵格檔案時,建議使用 PNG 輸出。GIF 輸出限定為最高 256 色,但柵格檔案通常至少具有
256 RGB 或灰階顏色。添加向量圖層可能會引入 256 種以上的顏色,
二、SVG輸出
可縮放向量圖形(英語:scalable vector graphics,SVG)是基於可延伸標記語言 (XML)(XML),用於描述二維向量圖形的一種圖形格式。
好處
(1)、影像檔可讀,易於修改和編輯
(2)、與現有技術可以互動融合。SVG檔案還可嵌入JavaScript)指令碼來控制SVG對象
(3)、SVG圖形格式可以方便的建立文字索引,從而實現基於內容的Image Search
(4)、SVG圖形格式支援多種濾鏡和特殊效果,在不改變映像內容的前提下可以實現位元影像格式中類似文字陰影的效果
(5)、SVG圖形格式可以用來動態產生圖形。例如,可用SVG動態產生具有互動功能的地圖,嵌入網頁中,並顯示給終端使用者
樣本
<?xml version="1.0"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="467" height="462"> <!-- This is the red square: --> <rect x="80" y="60" width="250" height="250" rx="20" fill="red" stroke="black" stroke-width="2px" /> <!-- This is the blue square: --> <rect x="140" y="120" width="250" height="250" rx="40" fill="blue" stroke="black" stroke-width="2px" fill-opacity="0.7" /></svg>
MapXtreme Java Edition 支援採用 SVG 格式匯出地圖映像,要將匯出格式指定為 SVG,可在 ImageRequestComposer 中設定 MIME 類型。
例如:ImageRequestComposer.create(myMap, ImageRequestComposer.MAX_COLORS_256, Color.WHITE, "image/svg+xml");
也可以向SVG添加JavaScript 事件
SVG 文檔還具有一個與 HTML 文檔中的事件處理常式類似的事件處理常式工具。SVG 文檔可以提供
若干種事件類型的訊號,例如滑鼠移動、重新調整大小等。這一特性可用於實現互動操作。
3、渲染器的介紹
(1)、複合渲染器
MapXtreme Java 的渲染器稱為複合渲染器,可用於指定在圖形更新時需要重畫的圖層。這在只有部
分圖層包含更改資訊的時候尤為實用。CompositeRenderer 可用於將 MapJ 中的圖層劃分為靜態和
動態渲染的圖層。靜態圖層將只能重畫一次,並在本機存放區為位元影像。動態圖層將根據每個渲染請求
重畫。
複合渲染器提供實用的應用程式,例如顯示沿公路移動的車輛等功能。
在地圖上顯示移動的對象。GPS 應用程式可以顯示一輛沿地圖上的高速公路移動的卡車。基礎地圖
只需繪製一次,而卡車符號將在需要時隨時繪製(如每個位置改變)。
使用 CompositeRenderer 時切記以下資訊:
靜態圖層將繪製為本機存放區的位元影像。此時將使用大量記憶體,一個 640 x 480 的映像將至少佔用 2.7MB
記憶體。
更改 MapJ 上的縮放將導致靜態圖層變形。直線將顯示為階梯狀或鋸齒狀。
更改 MapJ 的中心將導致靜態圖層的邊緣平移。此時,可以重建靜態圖層。
(2)、漸進渲染
漸進渲染是 MapXtreme Java 提供的強大功能之一,用於先將部分地圖映像發送到客戶機,並隨之
在指定的時間間隔之內,發送更加完全的映像,直至完整映像接收完畢。與在整個地圖映像完成渲
染之後再發送映像相比,這一特性可以更快地實現接收映像的某些部分。
漸進渲染在需要重建花費大量時間訪問底層資料的圖層時非常實用。那麼採用漸進渲染與發送
一個最終的映像相比,顯示整個映像所用的總時間會略有增加。
客戶機控製圖像是否採用漸進渲染,以及採用多長的時間間隔來通過 ImageRequestComposer 使用
的特殊 MIME 類型返回。這一 MIME 類型採取以下形式:multipart/image;imagetype=xxx;interval=yyy
其中 xxx 是要返回的映像的 MIME(如 image/gif、image/jpg 等),yyy 是以毫秒為單位的更新時間
間隔。漸進渲染由 MapXtremeImageReneder 類上的 isDone() boolean 方法啟用。若將 isDone() 設定為
ture,那麼 MapXtremeImageRenderer 上的 toStream()、toFile() 和 toImage() 方法在流中返回下一
映像資料區塊。isDone() 方法可用於遍曆並檢索流中的每個後續映像,直至檢索不到為止。
String mime = "multipart/image;imagetype=image/png;interval=750";ImageRequestComposer irc = ImageRequestComposer.create(mapj, ImageRequestComposer.MAX_COLORS_256, Color.WHITE, mime);MapXtremeImageRenderer renderer = new MapXtremeImageRenderer("http://localhost:8090/MapXtreme/servlet/mapxtreme");while (!renderer.isDone()) {Image image = renderer.toImage();//do something with the image}