Java手机与空间制图处事(WMS)应用集成
当前位置:以往代写 > JAVA 教程 >Java手机与空间制图处事(WMS)应用集成
2019-06-14

Java手机与空间制图处事(WMS)应用集成

Java手机与空间制图处事(WMS)应用集成

副标题#e#

1 引言

人类的日常糊口行为80%以上与空间位置有关,对空间位置信息得到有着与生俱来的需要。跟着社会的成长,人们的勾当范畴越来越大,并且越来越不确定。这种移动性和不确定性给移动通信带来市场和挑战的同时,也为空间位置处事的开展和扩大带来了无限商机。空间位置处事(LBS——Location Based Service以下简称LBS),是指通过移动通信网络,回收无线定位,团结GIS地理信息系统,为用户提供基于位置导航、查询的一种增值业务。LBS属于移动GIS中典范的应用规模之一,它涉及到地理信息处事、计较机应用互操纵、无线通讯、手机等技能,属于空间信息、计较机网络协同计较交错学术规模。今朝,应用无线通讯技能最广的消费群体是手机用户,这些用户对空间位置处事有较大需求。

与此同时,陪伴着计较机网络、无线通讯等技能的成长,Java手机的应用已经在海内崭露头角。Java手机(注:J2ME手机是指支持Java Micro Edition,MIDP的手机,凡是我们所说的“Java手机”就是“J2ME手机”)一改传统手机成果牢靠、系统关闭的模式,为Java手机开拓者与用户提供了一个开放的接口,应用措施开拓者和用户可以按照本身的需要开拓或下载切合自身的软件。今朝,J2ME(Java 2 Platform,Micro Edition)已经成为今朝最风行的手机应用开拓平台之一。Java手机的成长已经为开拓基于Java手机平台的空间位置处事(LBS)提供了条件。针敌手机用户对空间位置处事的需求,笔者基于Java手机开拓出了“小我私家导航系统”。本系统的早期版本(基于Motorola 388手机),曾在2002年6月中国软件协会、Motorola、Sun公司等连系举行的“全国无线 Java 应用措施大赛”中得到优秀奖。

凡是来说,在CPU运算速度低、内存与存储空间有限的Java手机上开拓LBS与GIS导航系统是较量坚苦的,一些LBS用户对导航舆图信息的获取,往往是通过Java手机与相关LBS业务应用网络处事应用集成来实现的,这个中Java手机对网络GIS图像导航资源的获取与操纵,是任何LBS系统的焦点技能之一。笔者在自主开拓的“小我私家导航系统”中,操作J2ME手机(Motorola388、Motorola A760等)通过GPRS网络,实现了J2ME 手机与空间WMS(Web Map Service)处事应用集成,并获取导航舆图,并完成相关操纵。以下先容J2ME手机对网络图像资源的会见。

2 J2ME手机对图像工具的获取

2.1 J2ME手机对图像的获取与显示

J2ME手机的MIDP 1.0尺度版本,只支持PNG名目标图像。可以显示静态的图像和非静态的图像。静态图像是指一经建设,图像的内容就不再变革的图像。而非静态图像是指图像可以有J2ME画图语句动态建设。由于J2ME 手机的计较本领有限,在基于J2ME手机的移动GIS中,笔者回收了静态PNG名目标栅格图像。J2ME手机对静态图像的建设主要有两种方法:第一种方法:直接由绑缚在应用 JAR 文件中的应用资源文件来装载和建设一个静态图像[1]。其结构方法为:

Image img=Image.createImage(String pngName);

个中:pngName为J2ME应用措施Jar文件中的图像文件名。由于J2ME手机的存储容量有限(凡是为几百K或几兆),而LBS、移动GIS空间数据量相对较大,纯真地将LBS、移动GIS客户端的数据,凭据上述方法存储在移动客户端当地 J2ME 手机上,很难满意移动 GIS 空间数据的存储;别的,对移动客户端的数据更新也较量坚苦。

第二种方法:利用二进制PNG名目数据建设一个静态图像。

Image img=Image.createImage(byte[], int offset, int length);

个中:byte[]为PNG名目数据数组,offset,length别离为利用数组的偏移量与长度。

这种建设静态图像的方法较量机动,PNG名目数据数组可以来自J2ME措施的任那里所(如:网络)。笔者开拓的基于Motorola388 手机的LBS、移动GIS系统,就是操作移动客户端的Motorola388手机来动态地读取网络处事器的GIS空间数据(虽然数据名目可以是矢量或栅格名目),并且能较量利便地更新客户端的数据。

2.2 空间舆图处事(Web Map Service)的GIS图像动态出产

空间Web处事(Spatial Web Services)是关于空间信息应用之间的互操纵的研究规模。陪伴着计较机软硬件技能的成长,空间Web处事也成长很快,相应的尺度化事情也在迅速展开。空间信息今朝OGC已经拟定或发起的空间Web处事主要有:

◆Web Map Service,

◆Web Registry Service,

◆Web Feature Service,

◆Web Coverage Service,

◆Styled Layer Descriptor for WMS,

◆GeoCoder Service,

◆Transaction WFS 等等,

个中:ISO/TC211已经采用与空间Web相关的尺度有:Web Map Service (ISO 19128)尺度、以及ISO 19136-Geography Markup Language(地理信息标志语言GML)。

Java手机与空间制图办事(WMS)应用集成

图1:空间 Web 处事体系布局


#p#副标题#e#

#p#分页标题#e#

空间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 返回一幅按照客户端请求参数动态生成的舆图。

Java手机与空间制图办事(WMS)应用集成

如: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

将返回一幅舆图给客户端:

Java手机与空间制图办事(WMS)应用集成

图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、配置请求以及理会相应头。

#p#副标题#e#

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) {
}
}
}

 

#p#副标题#e#

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

#p#分页标题#e#

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处事之间的应用无缝集成,不单能让移动设备也能充实操作现有计较资源、让网络用户也能共享移动设备的移动计较资源,并且可以有效发挥网络处事的计较本领,并同时充实操作移动设备的移动性。

#p#分页标题#e#

操作J2ME手机,实现移动设备与空间制图处事(WMS)网络应用处事集成,可以实现J2ME手机对网络LBS、GIS图像数据的会见与舆图数据的显示,并在迅速实现小型的LBS、移动GIS焦点的导航舆图的显示成果。

本文旨在"抛砖引玉",不敷之处,敬请列位同行指正。

    关键字:

在线提交作业