科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

本文探讨利用 J2ME 手机,实现移动设备与空间制图服务(WMS)网络应用服务集成,可以实现对J2ME手机对网络LBS、GIS 图像数据的访问与地图数据的显示。

作者:佚名 来源:IBM 2007年11月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 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) { } } }




  4 J2ME 手机对导航图像资源的存储

  MIDP 规范为 MIDlet 提供了一种永久地存储数据并在以后访问他们的机制。这种永久存储机制叫做记录管理系统(Record Management System,RMS)。RMS 提供了 J2ME 程序对数据的的记录管理 API。利用 RMS,我们可以将 J2ME 手机由网络读取的图像资源(当然,任何数据文件也可以),保存在 J2ME 手机内部 Flash 上。

 
//定义RMS 数据对象 
RecordStore rs = null; 
RecordEnumeration rs_enum = null; 
try { 
//创建或打开 RMS 内部数据库"GIS" 
 rs = RecordStore.openRecordStore("gis",true); 
 rs_enum = rs.enumerateRecords(null,null,false); 
} 
catch ( RecordStoreFullException excpt0 ) { 
} 
catch ( RecordStoreNotFoundException excpt1 ) { 
} 
catch ( RecordStoreException excpt2 ) { 
} 
try { 
//将 J2ME 手机网络获取的图像文件数据写入数据库 
 rs.addRecord(kkk,0,kkk.length); 
} 
catch ( RecordStoreNotOpenException excpt0 ) { 
} 
catch ( RecordStoreFullException excpt1 ) { 
} 
catch ( RecordStoreException excpt2 ) { 
} 
….. 

  我们将 GIS 栅格图像文件存入 J2ME 手机的目的是:减少J2ME手机对网络相同资源的重复请求,J2ME手机将通过GPRS无线网络请求获得的GIS导航地图信息,存储到J2ME手机本地,将来如果J2ME手机再次访问或请求相同导航地信息时候,直接通过访问 J2ME 手机内部存储,就可以读取数据,显示地图。为此,我们可以通过打开数据库,将数据库记录读入一个字节数组(如:gisData []),通过该数组构造出图像。
 
byte[] gisData = null; 
try { 
 gisData = getRecord(0); 
} 
catch ( InvalidRecordIDException excpt0 ) { 
} 
catch ( RecordStoreNotOpenException excpt1 ) { 
} 
catch ( RecordStoreException excpt2 ) { 
} 
…. 
me=Image.createImage(gisData,0, gisData.length); 
…… 

   5 结束语

  计算机软硬件技术、网络技术,特别是无线数字通讯网络的普及与应用,已经为计算机之间的协同工作提供了必要的技术保障。从技术的角度来看,该阶段计算机之间的网络分布式计算协同工作方式,突出表现在计算机之间应用的互操作与无缝集成。具体地讲,除了典型的P2P计算模式之外,计算机之间的协同工作已经从传统PC的一些计算、逻辑业务工作正从台式机中分离出来,而朝两个方向发展。其一:计算机之间的协同工作中,一些网络分布式计算的工作回归到网络服务器,分布式计算的工作回归到网络服务器,服务器(或集群)可能是因特网或企业内部网的一个组成部分,也可能是另外一台提供计算服务的PC;服务器(如:计算网格)根据用户的需求,完成大规模运算服务,并将运算结果返回给用户。Web服务(如:空间制图服务WMS)、网格计算服务就是其中典型的代表之一。其二:一些网络分布式计算的工作,会转移到移动性更强的嵌入式计算平台上,如Java手机。 目前,Internet上不同软件提供商以及科研机构,提供了大量可以利用的Web服务资源,而且这些资源可以方便地被用户检索,并通过应用系统之间的互操作来使用。将Web服务延伸到移动设备,完成移动设备与Web服务之间的应用无缝集成,不但能让移动设备也能充分利用现有计算资源、让网络用户也能共享移动设备的移动计算资源,而且可以有效发挥网络服务的计算能力,并同时充分利用移动设备的移动性。

  利用 J2ME 手机,实现移动设备与空间制图服务(WMS)网络应用服务集成,可以实现对J2ME手机对网络LBS、GIS 图像数据的访问与地图数据的显示,并在迅速实现小型的LBS、移动 GIS 核心的导航地图的显示功能。本文旨在"抛砖引玉",不足之处,敬请各位同行指正。

查看本文来源

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

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

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