MapXtreme for java 地图渲染

来源:互联网 发布:杭州城乡院 知乎 编辑:程序博客网 时间:2024/04/30 15:48

地图渲染特指生成地图图像的过程。
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),用于描述二维矢量图形的一种图形格式。
好处

(1)、图像文件可读,易于修改和编辑
(2)、与现有技术可以互动融合。SVG文件还可嵌入JavaScript)脚本来控制SVG对象
(3)、SVG图形格式可以方便的建立文字索引,从而实现基于内容的图像搜索
(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}