ervice WMS 是一种 Web 服务,它提供了由地理空间动态产生用户所需要的空间信息的服务。用户可以获得适合自己显示的栅格(如:PNG, GIF or JPEG)、栅格数据(如:SVG),或 Web 图像元文件 Web Computer Graphics Metafile (WebCGM)等数据格式。OGC 定义了地图服务器 Web Map Service WM 的三种操作,GetCapabilities,GetMap,GetFeatureInfo。其中与导航密切相关的是 GetMap 操作,GetMap 返回一幅根据客户端请求参数动态生成的地图。
如:http://localhost:8080/wmsserver111/servlet/wms?VERSION=1.1.1 &SRS=epsg:4267&REQUEST=GetMap&LAYERS=Layers/World/Countries&STYLES=&BBOX= -180,-180,180,180&WIDTH=800&HEIGHT=600&FORMAT=image/gif
将返回一幅地图给客户端: 图 2 WMS GetMap 服务响应

3 Java 手机与网络
3.1 J2ME 手机对网络的支持
J2ME 手机使用 HTTP 协议作为 MIDP 网络库的网络协议。HTTP 是一个丰富而且被广泛使用的协议,可以在不同的无线网络中很简单地实现。MIDP 设备的 HTTP 可以使用 IP 协议,例如 TCP/IP 或非 IP 协议像 WAP 或 i-Mode 来实现。MIDP 网络 API 定义在javax.microedition.io.HttpConnection 中。这个接口扩展了javax.microedition.io.ContentConnection并且提供了附加的域和方法来解析 URL、设置请求以及解析相应头。
3.2 J2ME 手机对空间制图服务(WMS)导航图像(PNG 格式)数据的请求
以下代码仅演示J2ME手机对空间制图服务(WMS)数据请求核心的代码,空间制图服务(WMS)服务器,可以是任何符合OGC WMS标准的任何服务器(本文使用了Mapinfo MapXtreme 4.7提供的WMS服务)
package untitled9;
import java.io.*;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import javax.microedition.io.*;
public class Untitled0
extends MIDlet
implements CommandListener, ItemStateListener {
Display display;
Canvas canvas0;
// Custom declaration code starts here
public Untitled0() {
display = Display.getDisplay(this);
canvas0 = new Canvas() {
public void paint(Graphics g) {
HttpConnection content = null;
byte[] contents = null;
try {
content = (HttpConnection)
Connector.open("http://localhost:8080/wmsserver111/servlet/wms? VERSION=1.1.1&SRS=epsg:4267&REQUEST=GetMap&LAYERS=Layers/Beijing/ Road&STYLES=&BBOX=-180,-180,180,180&WIDTH= 120&HEIGHT=120&FORMAT=image/png");
/************************************************************************
通过 Http 协议建立连接 content 对象,取得 GIS 图像数据文件的长度;然后,
按照该文件的长度构造缓冲区 kkk[];由 content 对象获取输入流,
将数据输入流与数据输入流连接,将 GIS 图像数据文件的数据读入缓冲区 kkk[],
由 kkk[]缓冲区构造静态 GIS 图像对象me=Image.createImage(kkk,0,kkk.length);
这样就可以构造出静态 GIS 图像,从而就可以使用任何绘图语句将图像在 J2ME 手机屏幕上。
图像的显示:建立一个画布 Canvas,在 Canvas 的 paint 事件中,加入如下代码:
g.drawImage(me,0, 0, Graphics.LEFT| Graphics.TOP);
*************************************************************************/
try {
DataInputStream _in = new DataInputStream(content.openInputStream());
_in.available();
int _length = (int) content.getLength();
if (_length < 1) {
_length = _in.available();
System.out.println(_length);
}
contents = new byte[_length];
_in.readFully(contents);
_in.close();
System.out.println(contents.length);
Image img = Image.createImage(contents, 0, contents.length - 1);
g.drawImage(img, 0, 0, g.LEFT | g.TOP);
}
catch (IOException except) {
except.printStackTrace();
上一页 [1] [2] [3] [4] 下一页
|