科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java 手机与空间制图服务(WMS)应用集成

Java 手机与空间制图服务(WMS)应用集成

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文探讨利用 J2ME 手机,实现移动设备与空间制图服务(WMS)网络应用服务集成,可以实现对J2ME手机对网络LBS、GIS 图像数据的访问与地图数据的显示,并在迅速实现小型的LBS、移动 GIS 核心的导航地图的显示功能。

作者:中国IT实验室 来源:中国IT实验室 2007年9月22日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

    空间 Web 服务与标准的 Web 服务有着类似的体系结构,但是空间 Web 服务与标准的Web 服务也有一些区别:如:空间 Web 服务中消息的传递可能直接使用 XML 协议而不使用 SOAP 协议。鉴于移动用户最关心的是空间信息相关的地图信息,而 WMS 服务已经被ISO/TC211 采纳,以下主要围绕移动设备(如:Java 手机)与空间 Web 服务 WMS 之间的互操作来研究。

    地图服务器 Web Map Service 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 服务响应

图 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(); } } catch (IOException excpt0) { excpt0.printStackTrace(); } } { this.addCommand(new Command("command1", Command.SCREEN, 1)); setCommandListener(Untitled0.this); } }; // Custom constructor code starts here } public void startApp() throws MIDletStateChangeException { display.setCurrent(canvas0); } public void pauseApp() { } public void destroyApp(boolean unconditional) throws MIDletStateChangeException { } public void itemStateChanged(Item item) { } public void commandAction(Command c, Displayable d) { if (c.getLabel().equals("command1") && d == canvas0) { } } }






 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章