毕业设计(论文)-基于3G手机的虚拟城市系统的开发.doc_第1页
毕业设计(论文)-基于3G手机的虚拟城市系统的开发.doc_第2页
毕业设计(论文)-基于3G手机的虚拟城市系统的开发.doc_第3页
毕业设计(论文)-基于3G手机的虚拟城市系统的开发.doc_第4页
毕业设计(论文)-基于3G手机的虚拟城市系统的开发.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录1引 言- 3 -1.1 基于3G手机的虚拟城市系统的开发背景- 3 -1.2 基于3G手机的虚拟城市系统的功能简述- 3 -2开发环境- 4 -2.1 Eclispe 3.2简介- 4 -2.2 JBuilder 2006简介- 4 -2.3 PL/SQL Developer 7简介- 4 -3系统设计- 5 -3.1系统功能模块分析- 5 -3.2 系统实现流程- 5 -4数据库的设计- 6 -4.1 数据库逻辑结构- 6 -4.2 数据库E-R图- 9 -4.3 数据库连接- 10 -5系统模块的设计- 12 -5.1 第一视图设计- 12 -5.2 第二视图设计- 21 -5.3 第三视图设计- 23 -5.4 及时通信设计- 23 -6 总 结- 25 -参考文献- 26 -致 谢- 27 -ABSTRACT- 28 -基于3G手机的虚拟城市系统的开发南京信息工程大学计算机与软件学院,南京 210044摘要:随着移动通信的突飞猛进,特别是3G时代的到来,在中国,手机用户的普及率已超过1/3。同样,手机能实现的功能也越来越受到人们的关注。如何通过手机得到及时的资迅?基于3G手机的虚拟城市系统提供的地图查询、商家活动等功能较好地解决了这个问题。本系统采用java技术开发,主要实现手机端通过HTTP协议与互联网服务器之间的通信。本系统通过手机端的J2ME程序与Servlet服务器端进行交互,由Servlet的服务器端负责将交互信息存储在数据库中,商家可以将自己的商品信息存储在数据中。其它手机客户的J2ME程序可以获取这些交互信息以商品信息,从而可以更迅速地得到想要的资迅,如道路交通信息、天气情况、商品信息等。关键词:J2ME,虚拟城市,Servlet,GPS1引 言1.1 基于3G手机的虚拟城市系统的开发背景 中国移动通信客户可以通过手机上网、彩信等形式来查看当地的地图,了解自己的位置以及周边宾馆、医院、加油站等信息,甚至还可以查询该地交通限行、施工占路、拥堵情况等信息,这些信息将以图文的形式在手机屏幕上显示,并且能够平滑动态缩小放大,非常直观。该业务还可以根据这些信息为客户制定一条合适的行走路线,给客户的出行带来极大帮助。不仅如此,在车辆导航和公交调度中,该业务也一样可以发挥作用。通过这一业务,中国移动通信客户可以方便地进行地图浏览和缩放、客户定位、位置相关信息查询、地图彩信发送等操作。1.2 基于3G手机的虚拟城市系统的功能简述虚拟城市以娱乐体验为中心,平台的功能以支撑用户虚拟生存体验为核心,虚实结合,以数字化城市为依托,在此基础上构造虚拟城区。用户在这个平台中以某种身份存在,其位置既可以通过定位来确定也可以自由移动。用户之间通过交互拓展其相应的功能,逐步在真实城市数字模型的基础上构建虚拟城区、生成虚拟物品、构建虚拟人际关系和社团、发展虚拟商务。伴随着3G时代的到来,无线互联网络的带宽将大幅度提升,使得将先前互联网上的功能转到手机成为可能。目前,中国已经拥有超过4亿的手机用户,以手机平台开展的电子商务活动将成为潮流。人们的日常生活中拥有一部手机已经不是什么困难的事,开发虚拟城市系统将使得用户通过手机就能得到自己的出行路线、了解周围的名胜古迹以及公共设施等,可以通过虚拟的手机结伴旅游、一起玩游戏,认识更多的朋友。商家可以通过虚拟城市系统发布公司的最新产品、发布广告信息等,比以往的电视广告或报纸广告更具针对性也更加的便宜。2开发环境虚拟城市系统是基于JAVA开发的, 使用JAVA便于实现跨平台并且安全性较好。整个系统中需要完成手机端J2ME代码的编写、服务器端Servlet端代码的编写和数据库端存储过程的编写。手机端用Eclipse3.2来编写代码,目前Eclipse3.2是软件行业中比较流行的JAVA开发开发软件,主要的原因在于该软件是免费的而且支持丰富的插件。服务器的Servlet端为手机端提供与数据库的交互,用JBuilder2006开发,用JBuilder 2006是因为其集成了比较完善的Servlet开发环境,通过界面操作可以非常方便地构建Servlet的网页服务。数据库端暂时采用Oracle XE,存储过程的开发工具为PL/SQL Developer 7,选择PL/SQL Developer 7编写存储过程,主要因为其界面化的操作比较方便,不用过多的配置而且省去写SQL语句的格式,提高开发效率。下面简单介绍一下虚拟城市系统所使用到的几款软件。2.1 Eclispe 3.2简介Eclipse 3.2是一个开放源代码的、基于Java的整合型可扩展开发平台,也是目前最著名的开源项目之一,在Eclipse的安装目录下会有一个workspace文件夹。每当新建一个项目,都会在该目录中产生和项目同名的文件夹以存放与该项目相关的全部文件。安装Eclipse的步骤非常简单:只需将下载的压缩包按原路径直接解压既可。Eclispe 3.2提供了良好的插件支持,比如,本系统手机端的J2ME开发,只需要通过Eclispe 3.2 的软件更新将eclipseme的插件(下载地址:/) 安装到Eclispe3.2 中,即可方便地开发J2ME项目。2.2 JBuilder 2006简介JBuilder 2006是一款强大的Java企业级开发平台,集成了几乎所有的Java技术,涵盖了软件开发生命周期的各个过程。JBuilder 2006自带JDK 5.0,安装完JBuilder 2006后,不用再配置JAVA虚拟机的环境,非常方便。该软件集成了很多第三方的开发包,如Tomcat 5.5,虚拟城市系统中即用Tomcat 5.5作为Servlet端的服务器。JBuilder 2006全球领先的JAVA整合开发环境,通过界面化的方式轻松地实现程序的开发。2.3 PL/SQL Developer 7简介PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger调试器(需要Oracle 7.3.4或以上版本),安装后只需配置一下Oracle客户端即可通过界面对数据库进行操作。3系统设计3.1系统功能模块分析虚拟城市系统是将人们在城市中经常接触的活动提取出来,以电子(包括:手机、PC客户端等)的形式展现出来。人们日常生活中所涉及到与信息相关的活动,大致如下:得知附近哪里可以购买到自己如意的商品、比较好的娱乐场所、公共设施等,出行如何乘车,与他人交流,将自己的信息发布出去等。而商务活动则主要包括:做广告,发布新的产品信息,开展各种优惠活动等。用户如何通过手机来得到这些有用的信息,商家如何发布这些信息到用户的手机端?这正是虚拟城市系统设计中所遇到的问题。手机获得信息的方式有如下几种:短信息(也包括多媒体消息)、电话、上网服务。而虚拟城市系统的数据是存储在数据库中,在目前的技术条件下,手机直接与数据库进行通信是不太容易实现的。考虑到信息的内容及用户的花费,虚拟城市系统选择通过网络服务,即在数据库有手机用户之间架设一个WEB服务器进行中转,同时也便于处理手机端的不同的请求。在手机最普遍的三种网络通信(SOCKET协议、HTTP协议、数据报协议)中,我们选择HTTP协议。手机用户通过手机的HTTP协议请求WEB服务,WEB端处理程序查询数据库并将信息返回手机端。数据库中的信息可由管理员通过PC端程序将数据写入数据库或由商家通过WEB端程序将商品信息写入数据库。除了用户登录、注册及密码修改等基本功能外,简单描述其它的功能如下:定位服务功能:用户确定自己在虚拟地图上的位置,查询周围的各项设施情况,查询交通路线等。用户端手机选择一个城市后,进入地图部分,即向WEB端发送浏览地图的请求,WEB端将根据客户端的请求中包含的信息,查询数据库中对应的图片块,在服务器端将这些图片及图片上对应的地图信息合并成一幅地图传给手机端。商务功能:通过选定建筑,向用户推送该建筑中的商家信息。商家可以通过这种服务发布最新商业资讯。商家的商品信息将在地图上显示横幅或在商家自己的店铺中显示出来。手机端用户可以很形象地得到这些商品信息并查看这些商品的详细信息。即时通讯功能:用户可以自由地在各个城市间漫游与周围的已注册用户进行交互。可以将虚拟城市系统中的其它用户添加为自己的好友,与他们进行及时的通信。虚拟生活:在虚拟社区中构建论坛和博客,发布各类需求信息,用户可以购买或转让虚拟物品。用户可以注册自己的虚拟空间、店铺等,发布自己的信息,写日记等。游戏功能:用户可以单独或相约去“虚拟游戏城”一起下载手机小游戏或者玩各类在线交互式游戏。提供网络的对战游戏平台等。更多交互功能:用户可以自己对地图做标注,设置自己状态和表情,可以为各类商家设置虚拟物品。3.2 系统实现流程 根据要实现的功能对整个系统的制定如下的框架,如图3.2.1所示: 所有的信息均存储在Oracle数据库中,商家可以通过Servlet服务器端提供的网页服务向数据库中发布公司的信息;系统管理员通过PC机客户端向数据库中添加地图、系统消息以及进行日常的维护工作等。手机J2ME客户端可以通过HTTP协议发送请求到Servlet服务器端,Servlet服务器端根据请求类型的不同处理不同的业务逻辑,并将查询后得的数据返回给手机J2ME客户端,手机端J2ME程序解析字符串,并对服务器端返回的数据进行封装,以手机界面的形式显示给手机用户。图 3.2.1系统实现流程4数据库的设计4.1 数据库逻辑结构现在需要将上面的数据库概念结构转化为Oracl10g XE数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。由于在项目中我负责第一部分(定位服务功能)的设计,些处只列出该功能所对应的数据表,以下将着重介绍定位服务功能。根据数据库的需求分析和概念结构设计,定位服务功能部分的数据表由下面10个表格组成,各个表格的设计结果如下所示。其中通过province表记录系统中所有的省份,city表通过provinceid与province表关联,以下的基表中都会记录该行记录是属于哪个城市(通过cityid与city表关联)。将每个城市的地图抽象成图层,即layer表,一个城市一般有三个图层,定义为:主层,中间层,底层。其中主层的缩放比zoom为-1,表示不与其它层有比例关系,用来描述一个城市的轮廓;底层是最详细的一层,中间层的大小一般为底层的一半。将每个图层分为若干的块(图层的地图图片即由若干图片块组成,通过BLOCKIMAGE的BLOB字段存储)即表block,该表中记录当前图片块属于哪个城市的哪个层的哪行号与列号,并通过字段pos_X和pos_Y记录该图片块的左上角在底层的对应的坐标位置。我们将地图上的某坐标点标识为某个对象,存储在object表中,如医院、学校、商店等,并通过objecttyp表对这些对象的类型进行区分。如商家注册后便可以该坐标点为中心打出广告等。由于object表是以坐标点来标识的,所以当出现需要标识一个区域指定广告大小时,我们使用hotspot表,该表定义热区的范围,并通过字段mainlayerid和maxlayerid定义了在哪些层上进行显示这个热区。一个对象可以没有热区与它对应,但热区一定与一个对象对应,并通过hotspottype表来标识热区的类型。Hotspot表及object表均通过字段cityid、layerid与城市的某个层一一对应。Extra及extratype表则用来向地图上添加附加信息,比如,当用户进入地图时在地图上添加一个“上海欢迎您”的字样或添加其它图片等。字段类型是否主键是否允许为空说明ProvinceIDNumber(6)省份编号ProvinceNameNvarchar2(20)省份名称表4.1.1 province字段类型是否主键是否允许为空说明cityIdNumber(6)城市编号cityNameNvarchar2(10)城市名称layerNumNumber(1)该城市有多少层provinceIdNumber(6)Foreign省份descpNvarchar2(20)注释约束:cityid0表4.1.2 city字段类型是否主键是否允许为空说明layerIdNumber(5)层编号layerNameNvarchar2(10)层名称zoomNumber(5)比如50表示缩放比例为1:50;500表示1:500ScaleableNumber(1)是否可放大clickableNumber(1)是否可点击blockwidthNumber(5)本层中的块宽blockheightNumber(5)本层中的块高posxNumber(5)该层的宽posyNumber(5)该层的高cityIdNumber(6)Foreign城市编号descpNvarchar2(20)注释表4.1.3 layer字段类型是否主键是否允许为空说明BlockIDNumber(5)块编号layerIdNumber(5)地图编号layerNameNvarchar2(10)地图名称pos_Xnumber(5)左上角座标xpos_Ynumber(5)左上角座标ycolumNumsnumber(5)列号rowNumsnumber(5)行号BLOCKIMAGEBLOB块图片cityIdNumber(6)Foreign城市编号descpNvarchar2(20)注释表4.1.4 block字段类型是否主键是否允许为空说明ObjectIDNumber(5)对象编号ObjectNameNvarchar2(20)对象名称Pos_xnumber(5)坐标XPos_ynumber(5)坐标ycityIdNumber(6)城市编号ObjectTypeIDNumber(5)Foreign对象类型编号despNvarchar2(20)提示表4.1.5 object字段类型是否主键是否允许为空说明objectTypeIDNumber(5)对象类型编号objectTypeNameNvarchar2(10)对象名称despNvarchar2(20)提示表4.1.6 objecttype字段类型是否主键是否允许为空说明HOTSPOTIDNumber(20)热区编号HOTSPOTNAMENvarchar2(20)热区名称minlayeridNUMBER(3)显示层的范围下限maxlayeridNUMBER(3)显示层的范围上限cityIdNumber(6)城市编号HOTSPOTTYPEIDNUMBER(5)范围LEFTTOPXNUMBER(5)LEFTTOPYNUMBER(5)RIGHTBOTTOMXNUMBER(5)RIGHTBOTTOMYNUMBER(5)objectIdNumber(5)Foreign根据对象类型可关连到块表(blockid及layerid)及对象表ObjectTypeIDNumber(5)Foreign对象类型编号despNvarchar2(20)提示表4.1.7 hotspot字段类型是否主键是否允许为空说明hotspotTypeIDNumber(5)热区类型编号hotspotNameNvarchar2(10)热区名称despNvarchar2(20)提示表4.1.9 hotspottype字段类型是否主键是否允许为空说明layeridNumber (5)对象名称CityidNumber(6)城市编号layernameNvarchar2(5)对象名称PosxNumber(5)位置posyNumber(5)DespNvarchar2(20)提示extratypeIdNumber(5)Foreign装饰的类型(横符或其他)表4.1.9 extra字段类型是否主键是否允许为空说明ExtratypeidNumber(5)对象类型编号isanimationNumber(1)是否是动画ImgBLOB对象图片(存大图)HeightNumber(5)根据是否显示动画得到单张图片的大小WidthNumber(5)DespNvarchar2(20)提示表4.1.1 extratype4.2 数据库E-R图将数据库表中定位服务功能部分的结构以直接的E-R图(实体-关系图)显示如图4.2.1和图4.2.2所示:图 4.2.1数据库E-R图(1)图 4.2.2数据库E-R图(2)4.3 数据库连接连接Oracle10g XE数据库:DriverManager.registerDriver(new oracle.jdbc.OracleDriver();/注册驱动Class.forName(oracle.jdbc.driver.OracleDriver); /初始化设备String url = jdbc:oracle:thin:28:1521:XE;/数据库地址String userName = gprs;/用户名String password = gprs;/密码Connection conn =DriverManager.getConnection (url, userName, password);/获得数据库连接Statement stmt = conn.createStatement ();/创建缓冲池ResultSet rset = stmt.executeQuery (select * from City);/返回查询结果手机与web端连接:String url=/gprs/;/需要连接的网址HttpConnection conn = null;/http连接InputStream is = null;/输入流InputStreamReader isr = null ;StringBuffer line = new StringBuffer();try conn = (HttpConnection)Connector.open(url);/得到连接is = conn.openInputStream();/打开流isr = new InputStreamReader(is) ;int ic ;while( (ic = isr.read() != -1 )line.append(char)ic) ;catch (Exception ioe)System.out.println(ioe);finallytryif(conn!=null)conn.close();/释放流catch(Exception e)strTmp=line.toString();5系统模块的设计在完成对手机虚拟城市的总体构架及功能设计后,接下来在总体设计思想的指导下完成各功能模块设计和实现。5.1 第一视图设计第一视图包括:显示某个城市的三层放大图片。地图载入的数据包括绘制好的数据库中的地图图片文件和与图片坐标对应的地理信息数据,并将两者从逻辑上绑定。地理信息数据即该地图图像坐标区域内的各类商务信息。例如,extra表中的posx,posy,desp 上海第一百货 国际品牌女装大折扣买三百送一百 时间2007年10月1日。以上数据信息中x,y表示坐标值,第3数据段表示商家名称,第4数据段为服务信息,通过这样的绑定,使用户在浏览地图时,通过位置坐标触发商务信息的显示,从而实现商务广告、电子商务等功能。用户选择某个区域进入或自由浏览地图,客户端分析当前是否有必要载入新的地图区域图像文件。如果需要的话,向服务器端发出请求,建立连接并传递数据。如前述,传递的数据包括地图图像和与之绑定的该区域内的地理信息数据。用户通过手机键盘来移动自己的位置,当前位置移到具有相应商务信息的坐标位置时,屏幕下方信息栏显示相关商务信息。5.1.1 数据库数据录入1获得数据库连接,需要将oracle XE自带的JDBC驱动(ojdbc14.jar)包入到程序中,ojdbc14.jar可在XE的安装目录下搜索得到。详细的方法见4.2数据库连接,连接Oracle10g XE数据库。2创建城市信息 public boolean creatCity(String cityId,String cityName,String layerNum,String provinceId,String desp) try stmt = conn.prepareCall(insert into city values(?,?,?,?,?);/将数据插入city表 stmt.setString(1,cityId); stmt.setString(2,cityName); stmt.setString(3,layerNum); stmt.setString(4,provinceId); stmt.setString(5,desp); boolean bl= stmt.execute(); mit(); stmt.close(); stmt=null; return bl; catch (Exception ex) ex.printStackTrace(); ShowError.showError(ex.toString(); return false; 3插入城市图层 public boolean creatLayer(String layerId,String layerName,String zoom,String Scaleable,String clickable,String blockwidth,String blockheight,String posx,String posy,String cityId,String descp) stmt = conn.prepareCall(insert into layer values(?,?,?,?,?,?,?,?,?,?,?); /其它部分代码略4插入图层中的各图片public boolean creatBlock(String BlockID,String layerId,String layerName,String pos_X,String pos_Y,String columNum,String rowNum,java.sql.Blob BLOCKIMAGE,String cityId,String descp) stmt = conn.prepareCall(insert into block values(?,?,?,?,?,?,?,?,?,?); /其它部分代码略/只是能插入空的BLOB对象,其中BLOCKIMAGE为emptyblob()/下次用查询更新图片 public void insertBlob(String sql,BufferedImage bimg) /如SQL语句为:select blob from table where id=? for update BLOB字段插入方法 try Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); if (rs.next() /得到java.sql.Blob对象,然后类型转换为oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1); /到数据库的输出流 OutputStream outStream = blob.getBinaryOutputStream(); byte b=getByteArray(bimg);/将图片转成二进制流输入到数据表中的BLOB字段 outStream.write(b,0,b.length); outStream.flush(); outStream.close(); mit();/提交事务 rs.close(); catch (Exception ex) ShowError.showError(ex.toString();/处理异常 将图片转成二进制流输入到数据表中的BLOB字段 public byte getByteArray(BufferedImage bimage) BufferedImage bi = new BufferedImage(bimage.getWidth(),bimage.getHeight(), BufferedImage.TYPE_INT_ARGB);/创建bimage大小的RGBA格式的空图像 java.awt.Graphics g = bi.getGraphics();/根据空图片创建图片画布 g.drawImage(bimage, 0, 0, null);/将图像画到上面创建的空白画布上 java.io.ByteArrayOutputStream output = new java.io.ByteArrayOutputStream(); byte buff = output.toByteArray();/将图片打入输出流并转成二进制 return buff; 5创建图层上的热区及物体 public boolean creatObject(String ObjectID,String ObjectName,String Posx,String Posy,String cityId,String ObjectTypeID,String desp)/创建图层上的一个物体对象 stmt = conn.prepareCall(insert into object values(?,?,?,?,?,?,?); /其它部分代码略 public boolean creatHot(String HOTSPOTID,String HOTSPOTNAME,String minlayerid,String maxlayerid,String cityId,String HOTSPOTTYPEID,String LEFTTOPX,String LEFTTOPY,String RIGHTBOTTOMX,String RIGHTBOTTOMY,String objectId,String ObjectTypeID,String desp)/将上面通过creatObject方法创建的对象映射到热区上,以便客户端显示 stmt = conn.prepareCall(insert into hotspot values(?,?,?,?,?,?,?,?,?,?,?,?,?); /其它部分代码略插入的图片如下形式(以南京市市区部分地图为例,每个图片块分辨率均为200像素200像素),共三层,文件名的格式为:列号,行号.png,以便读取方便。第一层又称主层,与其它层无缩放关系。在layer表中的zoom字段,为各层与底层(第三层)的缩放比例,如图5.1.2的层对应的zoom为2,图5.1.3的层对应的zoom为1。人为定义主层的缩放比为-1,如图5.1.1。即图5.1.1与图5.1.2及图5.1.3无任何比例关系,而图5.1.3为图5.1.2放大一倍的图像。图 5.1.1第一视图第一层(zoom=-1)图 5.1.2第一视图第二层(zoom=2)图 5.1.3第一视图第三层(zoom=1)5.1.2 服务器端Servlet的编写Servlet根据客户端的不同的请求,返回不同的数据,主要是字符数据和图片。由两个java文件实现WEB服务端,servlet请求页面LayerInfo.java,负责判断不同的请求,并调用ConnDatabase.java中的方法处理相应的请求,处理完完毕后将数据传给客户端。1实例化数据库处理的工具类ConnDatabase.java,具体连接方法见4.2数据库连接ConnDatabase conn = new ConnDatabase();2返回字串if (action !=null & action.equals(getcityinfo) /得到全部城市信息 DataOutputStream dos = new DataOutputStream(response.getOutputStream(); dos.writeUTF(conn.getAllCityInfo().toString(); 3返回图片if(action!=null & action.equals(getpic) & pictype!=null & pictype.equals(main) & cityid!=null & cityid.length()0) /得到主层图片信息 ServletOutputStream outs = response.getOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(outs); response.setContentType(application/png); byte buff = conn.getMainLayerPic(cityid); bos.write(buff, 0, buff.length); bos.close(); outs.close(); 4ConnDatabase.java中的部分处理方法(1) 根据sql从数据库中取出块图片 public byte getLob(String sql) /根据sql从数据库中取出块图片 sp:select img from block where try Statement st = conn.createStatement();/sql=select img from block where blockid=118 and cityid=420121 and layerid=5; ResultSet rs = st.executeQuery(sql); /查询blob字段 if (rs.next() java.sql.Blob blob = rs.getBlob(1); InputStream ins = blob.getBinaryStream(); BufferedImage image=ImageIO.read(ImageIO.createImageInputStream(ins); ins.close(); mit(); return getByteArray(image); catch (Exception ex) ex.printStackTrace(); return null; (2) 获得所有城市信息 public StringBuffer getAllCityInfo() /所有城市信息 StringBuffer sb = new StringBuffer(); try Statement stmts = conn.createStatement(); ResultSet rs = stmts.executeQuery(select a.*,vincename from city a,province b”+” where vinceid=vinceid); while (rs.next() sb.append(rs.getString(cityid) + ,); sb.append(rs.getString(cityname) + ,); sb.append(rs.getString(layernum) + ,); sb.append(rs.getString(provincename) + ,); sb.append(rs.getString(desp) + ;); rs.close(); stmts.close(); catch (SQLException ex) ex.printStackTrace(); System.out.println(取城市信息失败); return sb; /1,上海,3,上海市,上海市地图;2,南京,3,江苏省,南京市区地图;(3) 根据sql得到获得图片数组 public ArrayList getLobArrayList(String sql) /根据sql得到获得图片数组 try Statement st = conn.createStatement(); ArrayList al = new ArrayList(); ResultSet rs = st.executeQuery(sql); /查询blob字段 while (rs.next() BufferedImage image = null; java.sql.Blob blob = rs.getBlob(1); InputStream ins = blob.getBinaryStream(); image = ImageIO.read(ImageIO.createImageInputStream(ins); image.flush(); al.add(image); ins.close(); mit(); return al; catch (Exception ex) ex.printStackTrace(); return null; (4) 根据图片数组及行图片数与列图片数拼成完整的图片 public BufferedImage getMap(ArrayList alImg, int w,int h) /从bufferedimage数组得到拼成的整图 int x = alImg.get(0).getWidth();/宽 int y = alImg.get(0).getHeight();/高 /w横向个数,纵向个数 int totalW = x * w; int totalH = y * h; BufferedImage backImage = new BufferedImage(totalW, totalH, 1); Graphics backScreen = backImage.getGraphics(); for (int i = 0; i alImg.size(); i+) while (!(backScreen.drawImage(alImg.get(i), (i % w) * x, (i / w) * y, (i % w) * x + x, (i / w) * y + y, 0, 0, x, y, null) ; return backImage; (5)根据城市编号,层编号及层中的块所在的行,列号得到以该块为中心的周围的8方向的图片,主层图片一次加载到手机等设备客户端,其它层由于图片较多,一次全部下载不现实,第一次加载9张图片,当在块切换时,根据移动方向再次下载额外的3张图片。如图5.1.4所示。图 5.1.4第一视图图片下载地图示例 public byte getNinePic(String cityid,String layerid,String row,String col)/得到9张图片 BufferedImage bf=new BufferedImage9;/用于保存9张图片 ArrayList rsExtra=new ArrayList9;/用于保存附着物信息 ArrayList aImag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论