版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封面文本对利用 J2ME 网络 API 接口 javax.microedition.io.HttpConnection 实现与服务器进行数据传递,服务器端利用 Servlet 来响应用户查询请求 java 专有类和方法来进行地图数据处理,以及在客户端显示、放大、缩小、平移、 色渲染出来进行了研究。关键词 :J2ME,MapXtreme ,地理信息系统,渲染作者: PanHongliang仅供个人学习来建立 HTTP 连接 ,使用 Mapxtreme for 查询地点用黄DESIGN AND IMPLEMENTATIONOFURBAN GEOGRAPHICINFORMATIONSYSTEMBAS
2、ED ON J2MEABSTRACTUsing network API interface javax.microedition.io.HttpConnection to set up to connection between theserver and the client and transmit datas. It responds to user queriesrequest with Servlet at server-side.Itprocesses map data by MapXtreme for java.It study how to show enlarge、 redu
3、ce、 translation 、render map.Itdiscusses the problems encountered on development process and the solve.Keywords: J2ME, MapXtreme, geographic information system, rend目录第一章 绪论 01.1 引言 01.2 城市地理信息查询系统的应用与前景 0第二章 相关技术介绍 02.1 什么是 J2ME022 J2ME 的架构 02.3 MAPXTREME FOR JAV筒介 12.4 SERVLET技术 22.5 基于 J2ME 的地理信息服
4、务系统特点22.5.1基于移动互联网络移动 22.5.2移动性 22.5.3瘦客户 22.5.4终端技术的先进性 2第三章 系统分析与设计 33.1 需求分析 33.2 系统总体结构 33.2.1 系统总体结构分析33.2.2 服务器端的分析以HTTP方式发送请求 43.2.3 客户端的分析设计53.2.4 分析手机的地理信息服务系统的难点和相应策略5第四章 系统的关键技术分析与实现 74.1 用户界面显示 74.2 服务器端的分析 94.2.1地图数据连接 94.2.2实现地图缩放 94.2.3空间查询 错误!未定义书签。 第五章 结论 13 参考文献 14 致谢 14面的图表描述了不同的虚
5、拟机、配置和简表之间的关系。它同时把J2SE API 和它的 Java 虚第一章 绪论1.1 引言随着 3G 时代的到来,无线通信迅猛发展,手机地图查询这种新颖的功能将得到快速的发展。 现在,人们获得信息的方式正在经历着以位置服务为主要特征的深刻变革,这就为手机地图查询这 一功能的普及提供了一个良好的环境。目前,越来越多的厂商在Su n,摩托罗拉,西门子和爱立信等公司的技术主持下,开始开发基于 J2ME 平台的无线应用服务。基于 J2ME 的城市地理信息查询 系统正是其中极具代表性的服务工程,目前已经有许多网站提供地理信息的查询,但在嵌入式设备中提供此项服务的系统还很少见。基于 J2ME 的城
6、市地理信息查询系统正是面向嵌入式设备而开发 的,具有界面友好,功能全面,性能稳定,易于扩展等特点,基本能满足用户的地理信息查询需 求。1.2 城市地理信息查询系统的应用与前景随着技术的快速发展, GIS(地理信息系统)已经在很多部门和领域得到了广泛的应用,这些领 域包括资源开发、环境保护、城市规划建造、土地管理、农作物调查与结产、交通、能源、通讯、 地图测绘、林业、房地产开发、自然灾害的检测与评估、金融、保险、石油与天然气、军事、犯罪 分析、运输与导航、 110 报警系统公共汽车调度等方面得到了具体应用。与此同时 , 无线移动设备得到广泛使用,各大生产厂商加大了对J2ME 技术的支持, J2M
7、E 技术是目前在许多移动设备上受到广泛支持的一种技术,可以在与台式机相比资源有限的环境中得到应 用,与先前的Symbian 等技术相比,具有平台开放性高,介入门槛低等优点,因此在此基础上的无 线设备应用开发就更有着广泛的意义。将传统的 GIS 技术和支持移动设备应用开发的 J2ME 技术进 行结合,构造能够方便快捷的查询地理信息查询的系统,就显得更具有应用价值。在 GIS 领域,目前许多公司和科研机构提供了非常好的应用解决方案,其中比较成熟的有美国 的 MapInfo 公司,他们的 Map-Info 系列产品,可以提供从单机到网络的整个应用的开发接口,比 较完善的产品包括 MapX,MapIn
8、fo 等,这中间的 MapXtreme for Java 产品是完全基于 Java 的开发 接口,可以提供完整的跨平台的基于网络的地理信息的查询和处理。第二章 相关技术介绍2.1 什么是 J2MESun Microsystems 将 J2ME 定义为 “一种以广泛的消费性产品为目标的高度优化的 Java 运行时 环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导航系统。”自从 1999 年 6loperConference 上声明之后2, J2ME 为小型设备带来了 Java 语言的跨平台功能,允许移动无线设备共 享应用程序。有了 J2ME, Sun 已经使 Java 平台能够适应集成了
9、或基于小型计算设备在 Java One Dive 的用户产品。2.2 J2ME 的架构J2ME 使用配置和简表定制 Java 运行时环境(JRE)。作为一个完整的 JRE,J2ME 由配置和简表 组成,配置决定了使用的 JVM ,而简表通过添加特定于域的类来定义应用程序。配置将基本运行 时环境定义为一组核心类和一个运行在特定类型设备上的特定JVM 。我们将在 J2ME 配置一章中详细讨论配置。简表定义应用程序,特别地,它向 J2ME 配置中添加特定于域的类,定义设备的某种 作用。拟机进行了比较。虽然 J2SE 虚拟机通常被称为一种 JVM ,但是 J2ME 虚拟机、 KVM 和 CVM 都是
10、JVM 的子集。 KVM 和 CVM 均可被看作是一种 Java 虚拟机 - 它们是 J2SE JVM 的压缩版,并特定 于 J2ME 。图 2-1 不同虚拟机、配置和简表之间的关系2.3 MapXtreme for java 简介MapXtreme for Java 版是企业级的地图绘制开发工具,可实现数据的可视化和地图绘制,帮助 企业作出更加出色的决策,并更加有效地进行运营和管理资产。在可管理的服务器网络上实现应用 程序的运行,不仅在很大程度上提高了规模效益,如降低硬件和管理成本,同时还明显改善了应用 程序性能、可靠性和安全性。使用MapXtreme for Java 构建的应用程序既可适
11、用于企业内部网,也 可适用于公共的因特网。MapXtreme for Java 是一个 100% 的纯 Java 类( Java 2 兼容)集合,借助于这一集合,可将应 用程序部署到各种系统,无论是 Windows 、 UNIX 系统,还是这两种系统的混合环境。MapXtreme 提供了支持多平台、高质量、高性能的易用解决方案来满足各种地图绘制需求。有 以下优点:(1)多平台支持 出于安全性、可靠性和性能方面的种种原因,诸如电讯和保险业等众多面向最终用户的行业, 均采用了 UNIX 系统;而与此同时,同一企业中的不同用户,还有可能使用 Windows 系统。在多 平台上部署类似解决方案是常见的
12、需求之一。借助于基于 Java 的地图绘制应用程序,开发人员编 写一个程序,即可在支持虚拟机的多种平台上运行。将MapXtreme Java 部署在服务器端运行,即可充分利用现有的 UNIX 或 Windows 资源。开发人员可以在一个系统上存储和控制数据,同时通 过编程从其他运行虚拟机的计算机实现相应数据的访问。(2)高扩展性对于使用 MapXtreme 创建企业级地图绘制解决方案的组织而言, 所开发的应用程序不仅应该 可以良好运行,而且还应该可以支持需要访问各种应用的所有用户。 MapXtreme 为此采用基于组件 的策略,提供了可靠的多线程解决方案,确保了出色的适应性和扩展性。借助于此,
13、企业即可根据 组织的具体需求来扩展应用程序。(3)快速部署借助于 MapXtreme ,用户可以实现应用程序的快速开发、安装和部署。本产品为此提供了用于 快速开发原型的 Web Application Builder 向导,以及展示 MapXtreme Java 基本概念和知识的若干示 例应用程序。这些示例应用程序既可以进一步开发为专用的应用程序,也可以作为用户自行开发应 用程序所依赖的基础。MapXtremeJava 与所有 J2EE 验证的 Web 服务器/ 浏览器兼容,并且不使用 专属的插件。使用 MapXtreme Java 可以构建两层和三层 Web 地图绘制程序,处理源自客户机的地
14、图数据请 求。借助于其灵活的可扩展体系结构,可根据具体绘图需要,向客户机发送软件、控制对于敏感数 据的访问和随需求的增长来扩展应用程序。程序员尤其可以:? 设计只具备所需的特性和信息的定制地图? 通过程序创建静态和动态对象? 自定义图元的外观、位置和行为? 监听类似用户鼠标点击的地图事件,初始化地图的变更对于要使用地图绘制应用程序的最终用户而言,可为其提供工具来实现:? 缩放和平移,以更改地图视野? 选择图元并绘制搜索区域? 查询图元以获取更多信息? 创建专题影线表示,例如基于数据库数据的颜色编码地图? 控制对象和标注的可见性和样式2.4 Servlet 技术Servlet 是使用 Java
15、Servlet 应用程序设计接口 ( API ) 及相关类和方法的 Java 程序。 除了 Java Servlet API ,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。 Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。 Java servlet 对于 Web 服务器就好象 Java applet 对于 Web 浏览器。Servlet 装入 Web 服务器并在 Web 服务器内执行,而 applet 装入 Web 浏览器并在 Web 浏览器内执行。 JavaServlet API 定义了一个 servlet 和
16、Java 服务器之间的一个标准 接口,这使得 Servlets 具有跨服务器平台的特性。我们在研究和设计支持地图查询和显示系统中间 , 利用 MapXtreme for Java 结合 Servlet 构造一个地图应用的服务器 , 利用 J2ME 来设计移动设备端的 应用界面和响应接口 , 可以实现从地图查询显示到相关应用的一系列功能。2.5 基于 J2ME 勺地理信息服务系统特点2.5.1 基于移动互联网络移动互联网的发展推动网络地理信息技术从PC 机走向手机和 PDA 等移动设备。基于移动互联网络的 Java 手机的地理信息服务具有移动互联网络带宽较小、时延较大、连接可靠性较低等特性。2.
17、5.2 移动性移动的互联网方便了网络用户在移动中,随时随地地获取所需的GIS 信息和服务。移动地理信息服务系统具有可以提供给移动中的用户的当前位置和方便的查询自己感兴趣的或周围的地理信息 等功能,移动性是传统的互联网络所不能比拟的优势。2.5.3 瘦客户基于手机终端的地理信息服务系统受手机设备的特性限制,是客户端向服务器端请求地图图像,并进行显示,服务器进行空间数据的选取和图像生成的工作。而Java 手机由于采用了 J2ME 技术,所以允许用户进行一些智能化的处理。普通的Java 手机由于受存储器容量、处理器速度等限制,只能进行极少量运算,因而在普通手机上开发基于矢量的地理信息应用难度相对较大
18、。而PDA型的 Java 手机由于处理器和存储器及显示能力方面的限制相对较小,可以承担较多的计算工作,客 户端可以请求部分地图图形数据,解读这些数据,执行地图的生成和显示的工作,并执行一些简单 的查询。这种情况下,客户端由于是矢量格式的图形,故可以在数据允许的范围内,执行某些基于 矢量的地图操作。如新太集团移动终端产品事业部推出的面向 Motorola A6288 、 388 广深指南,其客 户端就采用了基于矢量格式的地图。2.5.4 终端技术的先进性采用 J2ME 技术作为客户端技术有很多优点。首先,J2ME 军决方案具有”智能化”的特点,这种智能化特点能辨认出用户访问的信息是本地的还是 I
19、nternet 上的。如果是在本地,则将存储区 域中的信息调出来供用户浏览;若是 Internet 上的,则将所需要的信息或程序下载到存储区。其 次,从用户操作的角度讲,J2ME 能提供更多更灵活的交互方式。在 J2ME 平台支持下,手机可以生 成并显示基于矢量的图形,并且可以提供给用户基于矢量的图形操作。再次,从显示效果来看,通过使用 J2ME 技术,用户将不再被限制在 WA 设备的有限的单色接口,而是可以很容易地享受到丰富多彩的生动的图像和应用。此外,J2ME 还可以提供离线的服务。第三章 系统分析与设计3.1 需求分析与以往人们需要购买纸质地图产品不同,现在人们并不需要直接购买地图产品,
20、而是通过购买 汽车、手机或上网等途径使用电子地图产品。随着手机的日益普及,无线通信的多样化服务越来越 接近普通消费者,而基于J2ME 的城市地理信息查询系统正是其中极具代表性的服务工程,目前已 经有许多网站提供地理信息的查询,但在嵌入式设备中提供此项服务的系统还很少见,J2ME 城市地理信息查询系统正是面向嵌入式设备而开发的,具有界面友好,功能全面,性能稳定,易于扩展 等特点,依托专业的地图服务器 MapXtreme 的支持,基本能满足用户的地理信息查询需求。打开手机,就能看到自己在地图中的确切位置,无论走到哪里都不存在迷路的问题了。通过手 机地图,迅速查找离自己最近的车站、饭店、旅馆等信息,
21、对于驾车用户,可以方便分析自己的驾 车路线,如果第三方软件通过 Google 地图开发交通道路塞车信息等服务,那么对于大城市的驾车者 来说,可以为此节省大量时间,我想即使是付费服务,也有很多人愿意掏钱购买这么有用的服务 的,毕竟中国的手机用户远远高于上网用户。所以上我觉得开发基于J2ME 的城市地理信息系统非常有必要,也很有前景,必定会受到手机用户的喜爱。3.2 系统总体结构在研究和设计支持地图查询和显示系统中间,利用 MapXtreme for Java 结合 Servlet 构造一个地 图应用的服务器,利用 J2ME 来设计移动设备端的应用界面和响应接口,可以实现从地图查询显示 到相关应用
22、的一系列功能。3.2.1 系统总体结构采用 MapXtreme for Java 作为地图服务器端,用于对地理数据进行查询和处理,并结合Servlet技术对客户端的请求进行响应,这样可以很好的结合MapXtreme 地理信息处理和 Servlet 的多线程处理能力。系统客户端使用 J2ME 标准 API 和 MIDP 类库,因此具有很好的通用性,当用户使用地 点查询功能时,系统提示用户输入要查询的地名,从服务器上返回地图图片数据,在客户端显示。 系统总体结构分析图如图3-1 所示。图 3-1 系统总体结构分析图 在系统中间没有考虑无线网络与客户端以及与服务器端的网关,系统环境中要求无线网络和支
23、 持 HTTP 协议, Web 服务器通过 HTTP 流接受从客户端发送过来的请求和发送处理的结果,地图服 务响应处理模块则是系统的核心部分,专门负责对地图数据的实际处理和返回。地图数据采用了 MapInfo 的 Tab 表格式,这些文件划分为概念类似于工作空间的geoset (扩展名为.gst) 组。 例如, 数据中有一个 world.tab 文件和一个 world.gst 文件。 geoset World.gst 是一种元 数 据 文 件 ,用 于 说 明 一 个 包 括 world.tab 和 其 他 文 件 的 .tab 文 件 集 合 。 用 myMap.loadGeoset(geo
24、setName,dataDir, servletURL) 。来进行加载,其中 geosetName 是到 geoset 的 完整路径, dataDir 是 geoset 中引用的 .tab 文件在服务器计算机上的位置(可能和 MapXtremeServlet 不在相同的计算机), servletURL 是 MapJ 使用远程 DataProviderRef 时到 MapXtremeServlet 的路径 (如果使用 LocalDataProviderRef ,参数为空)。MapXtreme Java 还提供了采用.mdf 格式的数据集。基于 XML 的地图定义是说明地图图元和设 置的文本文件,
25、打破 geosets 的限制条件,所以建议使用地图定义。那么如何来加载地图定义呢?要显示现有地图定义,可执 行以下操作:myMap.loadMapDefi nitio n(m_fileToLoad)。其中 m_fileToLoad为地图文件所放置的绝对地址。客户端主要提供用户查询的输入接口和与服务器端连接的接口,并且在手机上显示查询结构(查询后的地图),同时还具有对地图进行放大,缩小和移动的功能。服务器主要以HTTP 方式接收客户端请求,并根据请求将地图数据以数据流传输的方式返回给客户端。系统结构框图如图3-2图 3-2 系统结构框图3.2.2 服务器端的分析由于客户端是与服务器端的Servl
26、et 进行通信,服务器端主要是如何配合客户端的功能设计。Servlet 的核心内容就是要对客户端发来的请求进行处理,然后将处理结果写入响应中发送到客户端。servlet 有良好的生存期的定义,包括如何加载、实例化、初始化、处理客户端请求以及如何被 移除。这个生存期由javax.servlet.Servlet 接口的 init,service 和 destroy 方法表达。(1)加载和实例化容器负责加载和实例化一个servlet。实例化和加载可以发生在引擎启动的时候,也可以推迟到容器需要该 servlet 为客户请求服务的时候。首先容器必须先定位servlet 类,在必要的情况下,容器使用通常的
27、Java 类加载工具加载该servlet,可能是从本机文件系统,也可以是从远程文件系统甚至其它的网络服务,可以通过JavaWeb 服务器的 HTTP Web 服务的 servlet 控制页面来控制。容器加载servlet 类以后,它会实例化该类的一个实例。需要注意的是可能会实例化多个实例,例如一个servlet 类因为有不同的初始参数而有多个定义。servlet 只加载一次,servlet 的多个线程将处理客户的多个请求。(2)初始化servlet 加载并实例化后,容器必须在它能够处理客户端请求前初始化它。初始化的过程主要是 读取永久的配置信息,昂贵资源(例如 JDBC 连接)以及其它仅仅需要
28、执行一次的任务。通过调用 它的 in it 方法并给它传递唯一的一个(每个 servlet 定义一个)ServletCo nfig 对象完成这个过程。给 它传递的这个配置对象允许servlet 访问容器的配置信息中的名称值对(name-value)初始化参数。这个配置对象同时给servlet 提供了访问实现了ServletContext 接口的具体对象的方法,该对象描述了 servlet 的运行环境。在 servlet 被适当地初始化后,容器就可以使用它去处理请求了。每一个请求由 型的对象代表,而 servlet 使用 ServletResponse 回应该请求。这些对象被作为 递给servl
29、et 。在 HTTP 请求的情况下,容器必须提供代表请求和回应的HttpServletResponse 的具体实现。需要注意的是容器可能会创建一个 servlet 实例并将之放入等待服 务的状态,但是这个实例在它的生存期中可能根本没有处理过任何请求。(4) 服务结束 容器没有被要求将一个加载的 servlet 保存多长时间,因此一个 servlet 实例可能只在容器中存活了几毫秒,当然也可能是其它更长的任意时间(但是肯定会短于容器的生存期)当容器决定将之 移除时(原因可能是保存内存资源或者自己被关闭),那么它必须允许 servlet 释放它正在使用的任 何资源并保存任何永久状态(这个过程通过调
30、用 destroy 方法达到)。容器在能够调用 destroy 方法 前,它必须允许那些正在 service 方法中执行的线程执行完或者在服务器定义的一段时间内执行(这个时间段在容器调用 destroy 之前)。一旦 destroy 方法被调用,容器就不会再向该实例发送任 何请求。如果容器需要再使用该servlet,它必须创建新的实例。destroy 方法完成后,容器必须释放servlet 实例以便它能够被垃圾回收。本系统的 Servlet 运行在 MapXtreme for java 服务器中 , 具体实现以下功能(1)连接地图数据。(2) 生成相应的地图图片。(3) 发送到客户端。3.2.
31、3客户端的分析设计本系统的主要功能是要在服务器端完成的。客户端主要在于提供给用户一个操作界面, 而这一点是与移动设备的特点相关的,移动设备的处理能力、资源有限, 所以需要尽量将计算处理集中于服务器端完成,减小客户端的负担、提高效率。而要集中于服务器端完成的首要条件就是必须能与 服务器通信,J2ME 技术中 MIDP 网络库中是以 HTTP 作为网络协议的,这使得 MIDP 设备实现网 络接口变得非常简单。客户端功能实现具体分为以下几个模块:(1) 发送用户选择的城市、地点类型、输入的地名信息等到服务器;(2) 接受服务器端返回的地图数据;(3) 选用合适的方法显示地图。3.2.4 地理信息服务
32、系统的难点和相应策略(1) 手机存储器和海量的数据之间的尖锐冲突。虽然现在很多手机都有了好几个 G 的存储容量,但是,我们必须要考虑到现在还是有很多的用 户的手机没有存储卡的。为了克服这个限制,我们必须采用比较合理的数据结构,对数据进行纵向 分层、横向分块、多次请求等策略,以减少一次请求传到手机终端的数据量。(2) 手机处理器处理速度比较慢。相对于电脑来说,那手机的处理速度实在是没法比拟的。所以在开发针对手机设备的GIS 应用系统时数据的输入、解读、地图的生成和显示等都会比较慢,因而我们要尽可能地减少手机处理器 的负担,尽可能将大量的计算工作放在服务器端。(3) 连接无线网络时延时比较大,网络
33、传输速度比较慢。当前 GSM 移动通信网的传输速度是每秒 9.6 千比特,GPRS 移动通信网的传输速度理论上可达 每秒 171.4千比特,实际上 GPRS 的数据传输速率每秒只有 20-30 左右。这时我们就必须尽可能的 减少客户和服务器的交互,减少每一次传输到手机设备的数据量,并且充分利用客户端已有的数 据。3)处理请ServletRequest 类service 方法的参数传HttpServletRequest 和第四章系统的关键技术的实现4.1 用户界面显示用户界面的显示,借助菜单,按钮等标准元素帮助用户方便地对手机进行操作,并将 结果以图形的方式显示给用户。手机属于 CLDC 规格,
34、而在 CLDC 中本事并没有包含任何的用户界面包,这些包被定义在 MIDP 中。在 MIDP 中,使用 java.microeditio n.lcdui 包来获得界面对象。在java.microediti on .Icdui 包里面的界面对象是由及 Canvas 两类,而 Screen 是高级屏幕对象,MSDP GUI 的核心是 Screen,而每个Display 对象,它管理这屏幕的显示。当调用Displayable 继承而来的,其中有分为ScreenCa nvas 是低级屏幕对象。MIDP 的应用程序(MIDIet )会于唯一的一个Display 对象的 setCurrent ()函数时候
35、,屏幕就被显示。地图的显示,调用了MIDIet 中的 Display.getDisplay(this)方法和 Display 对象中的 setCurrent ( Display d )函数来显示主界面对象。做移动 GIS 并使用 J2ME+MapxTreme 模式那么其中一个问题很让人头痛,那就是如何将 MapxTreme 渲染出来的 Image 返回给客户端。J2ME 接收数据的时候是将 InputStream 转换成 Byte 然后再进行处理的。可以将MapXtremeRender 出来的图片现保存到硬盘然后通过InputStream iStrm = new FileInputStream
36、(curpath+*.gif)。方法将其转化为 InputStream 然 后再转化为 Byte, imageData = baos.toByteArray()。,把得到的数据流转化为 Byte,然后再 渲染出来。手机客户端与后台 MapXtreme 服务器通过网络通信程序进行数据传输。在J2ME 中有javax.micrioeditio n.io 包,在该包中提供了Conn ection 框架,由一组接口构成,包括了Conn ection 接口及子接口。在CLDC 中定义了 7 个接口,其中包括 Co nten tCo nn ection,在MIDP 增加了一个 HttpConnection
37、 接口。Connector 类可以用来进行网络等各方面的输入及 输出,有用的都是Connector 的 open ()函数。同时用 HttpConnection 接口建立 HTTP 连接,实现网络的连接。在 J2ME 中有 2 种实现线程的方法,可以是java.lang.Runnable 以及 java.lang.Thread 的方式,这里采用了后者,java.lang.Thread 类表示一个线程类,它定义了设置和查询线程属性的函数和启动线程运行的run ()函数。从服务器端获得数据一般是先给定一个URL 地址以打开与服务器的连接,然后从中打开数据流,最后从中读取数据。主要用到了Connec
38、tor 类和 HttpConnection 接口。在向服务器提交数据时有两种方法:Get 和 Post。HttpConnection c = null ;System.out.print(url)。Stri ngBuffer strbuf = new Stri ngBuffer()。ByteArrayOutputStream baos = new ByteArrayOutputStream()。/保存读入的图片数据 Data InputStream dis = null。byte imageData = null。try/打开对象 c = (HttpConnection)Connector.o
39、pen(url)。/System.out.println(url)。/客户端名称c.setRequestProperty(User-Age nt, Profile/MIDP-2.0)。/可以接受的 MIME 类型c.setRequestProperty(Accept, text/html,*/*)。int len = (int)c.getLength()。dis = c.openDatalnputStream()。打开输入流System.out.println(len)。/如果取得了长度则读入全部的数据if(le n0)byte data = new bytelen。dis.readFully
40、(data)。for(int i = 0。idata.length。i+)/strbuf.append(char)datai)。baos.write(datai)。else /否则逐个逐个字节读入int ch。while(ch=dis.read()!=-1)/strbuf.append(char)ch)。baos.write(ch)。catch(Excepti on e)System.out.println(Error3+e)。finally/把不要用到的变量置空msg.setText(strbuf.toString()。strbuf = null。if(dis!=null)dis.close
41、()。if(c!=null)c.close()。f.setTitle(null)。imageData = baos.toByteArray()。将 Image 转化为 Byte 类型try/使用 createImage 方法创建 Image,数据信息已经在imageData 数组中image = image.createImage(imageData,0,imageData.length)。if(image =null)/ 如果 image 为 null 提示出错了Alert alert=new Alert(ERROR,NOT FOUND, null, null) 。alert.setTime
42、out(2000)。alert.setType(AlertType.ERROR)。catch(NullPoi nterException e)System.out.pri ntln (NullPoi nterExceptio n)。/f.append(image)。xianshi()。渲染地图下面图 4-1 为渲染地图的结果。图 4-1 地图渲染4.2 服务器端的功能实现服务器端可以具体分为:连接地图数据、接受客户端的请求、生成地图图片数据、发 送数据等几个核心的流程。4.2.1 地图数据连接使用 MapXtreme for java 中的特有类 MapJ,可以装载 gst 格式的文件,该文件
43、可以 通过 MapDefinition Manager 装载 tab 文件来进行生成,这是 MapJ 可以装载的一种图 形定义格式,然后可以进行比例尺以及图形尺寸和相关特征的加载。if (m_fileToLoad.e ndsWith(.gst)myMap.loadGeoset(m_fileToLoad, m_mapPath, null)。else myMap .lo adMapDefi niti on( m_fileToLoad)。然后对地图进行渲染。II为 MapJ 建立 renderer 来渲染地图try MapXtremelmageRe nderer rr = new MapXtreme
44、lmageRe nderer(m_mxtURL)。II 按照参数绘制地图rr.render(lmageRequestComposer.create(myMap,NUM_OF_COLORS,BACKGROUND_COLOR, image/gif) 。以数据流的格式输出到客户端rr.toStream(res.getOutputStream()。4.2.2 实现地图缩放主要对地图实现放大、缩小等操作。此项功能得到最终的放大(缩小)的图片,并把 下载路径传回客户端。这个功能与目前许多地理信息网站提供的功能相似,而网站上直接 由鼠标点选放大缩小地址的设计给了我们启发, 手机端虽然没有鼠标, 但我们设法结
45、合使 用方向键的功能设计出了自己的“鼠标”,也就是用户可以点击右边的软键,然后选取操 作菜单中的zoomln”或“ zoomOut”即可达到放大缩小的功能。如图 4-2 所示。int tool = NO_TOOL。II放大,缩小,平移或是查询/监听是否要用到工具if (reqParam = req.getParameter(tool)!=n ull) tool = Integer.valueOf(reqParam).intValue()。/得到前面地图的中心坐标DoublePoint newpoint = myMap.getCenter()。/取得放大比例double newZoom = my
46、Map.getZoom()。if (tool = ZOOMN _TOOL) newZoom /= 2.0。else if (tool = ZOOM_OUT_TOOL) newZoom *= 2.0。图 4-2 地图缩放4.2.3 空间查询查询是根据用户输入条件,查找到相关信息并在地图上显示对应的图形和属性数据。接收到客户端的地点查询时在地图数据某个图层上找到相应点的坐标,关于这一点可以通 过对图层中的列信息中的特征项和所查找的名称相匹配的手段来实现。/调用 removeTheme 方法来移除取消前面的地图特征主题MapperServlet.removeTheme(myMap)。下面来处理查询,
47、并高亮显示查找到的那个点/Feature 对象的集合,构成地图的各个图层通常在每个图层中都拥有相同的图元类型FeatureSet featureset = n ull。Feature feature = null。/ Feature 对象/Attribute attribute = new Attribute(La nZhou)。ArrayList a = new ArrayList()。/ QueryParams qp = new QueryParams(bGeometry,bRe nditi on ,bPrimarykey,/bLabelPoint,bRasterInfo,bLabelRe
48、ndition, SearchType.entire)。限制某个图元返回的信息/QueryParams 类还可以指定搜索类型,SearchType.partial :查询返回与搜索区域交叉的图丿元。QueryParams queryParams = new QueryParams(true, true, false, true, true, true, SearchType.partial)。/layer 得到特征图层的信息FeatureLayer layer = (FeatureLayer) myMap.getLayers().get(Asia Major Cities)。int colCo
49、unt = layer.getTableInfo().getColumnCount()。特征图层的所有列数String coiname。歹 U 名if (layer != null) for(int i=0。i-1)sb.append(newZoom)。/找到的图元的坐标screenpoint = feature.getGeometry().getBounds().center()。newpoint = screenpoint。sb.append(”newpoint:+newpoint)。/咼亮显示Select ion Theme selTheme = new Selectio nTheme(
50、LocateFeature)。创建一个 SelectionTheme/创建 Selection 对象,并且把选择的图元加入Selection sel = new Selection()。sel.add(feature)。/把 Selection 对象加入到 SelectionThemeselTheme.setSelecti on( sel)。/设置 SelectionTheme 的显示渲染的样式 com.map in fo.graphics.Re nditi onrend =com.map in fo.graphics.Re nditi onl mpl .getDefaultRendition
51、()。/填充颜色,字体大小,框格的背景色ren d.setValue(com.mapi nfo.graphics.Re nditio n. FILL, Color.YELLOW)。ren d.setValue(com.mapi nfo.graphics.Re nditio n.SYMBOL_FOREGROUND,Color.YELLOW)。ren d.setValue(com.mapi nfo.graphics.Re nditio n.FONT_FAMIL Y,MapInfo Symbols)。ren d.setValue(com.map in fo.graphics.Re nditio n.
52、FONT_SIZE, new Float(30)。ren d.setValue(com.mapi nfo.graphics.Re nditio n.STROKE, Color.YELLOW)。ren d.setValue(com.mapi nfo.graphics.Re nditio n.STROKE_WIDTH, 3)。char c = new char1。c0 = (char) 36。ren d.setValue(com.mapi nfo.graphics.Re nditio n.SYMBOL_STRING ,new String(c)。selTheme.setRendition(rend
53、)。layer.setSelectable(true)。/添加 SelectionTheme 到指定的 layer 的 theme 列表中去 layer.getThemeList().add(selTheme)。break。下图为输入 Wuhan 并查找到,以黄色来显示。图 4-3 地点查询这项功能后期扩展后还可以根据用户输入的查询地址提供该地址周边的各类环境信 息,包括商店、交通、餐饮等等,直接面向真正的商业应用。还可以提供放大的详细的图 片信息,使用户获得的单次服务更加超值,提升本系统的市场竞争力。这一功能的实现原理是服务器端对于用户的首次查询有一张基础地图,用户所输入的 坐标值正是在这一
54、基础图上查询的,而服务期端则根据用户坐标和基础图两个参数搜索出 相应的符合要求的图片,并返回客户端相关信息。后期还可以扩展查找最短路径的功能。在人们出行的时候,可能不熟悉那个地方,那 么有了这项功能,那他就可以随时随地查找路线图,非常方便快捷。第五章 结论地理信息系统的应用范围已经越来越广泛 ,但目前在小型移动设备上进行图形化查询 和应用地理信息还不是非常普遍 , 本文尝试利用 J2ME 与MapXtreme for Java 相结合构造 了一个地图的查询和显示系统 , 该系统可以极大的方便移动地理信息的查询和相关应用 随 着 J2ME 支 持 设 备 的 不 断 增 加 , 相 信 能 得 到 进 一 步 的 应 用 。参考文献1 孙燕刚,基于 MapXtreme for Java 定制 JSP 标志的 WebGIS 研究,地理空间信息,2007 ; 05: 152 卜建明,基于 MapObjects 的上海市地理信息查询系统,计算机工程,2006; 13:2693 王婷,基于 MapXtreme 的城市报警监控系统的实现,微计算机信息,2008; 07:1404 李小根,MapXtreme 的基本构架及其应用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年购销合同:某钢铁企业向供应商订购0万吨原材料2篇
- 二零二五年度高铁站房PC构件预制及吊装工程合同2篇
- 二零二五年度物业管理顾问合同(含交通枢纽管理)2篇
- 二零二五版货车司机意外伤害赔偿合同范本3篇
- 二零二五年度绿色环保型二手房按揭交易合同模板3篇
- 二零二五食堂承包合同(大路食堂运营管理)3篇
- 二零二五版二手房买卖与家具选购代理合同3篇
- 税务局2025年度企业社会责任报告编制合同
- 二零二五年度智慧社区家居安装合同规范3篇
- 二零二五年度虫草科研合作与技术转移合同范本3篇
- 居家养老护理人员培训方案
- 江苏省无锡市2024年中考语文试卷【附答案】
- 管理者的九大财务思维
- 四年级上册数学应用题练习100题附答案
- 2024年度中国电建集团北京勘测设计研究院限公司校园招聘高频难、易错点500题模拟试题附带答案详解
- 有关企业会计人员个人工作总结
- 人教版高中数学必修二《第十章 概率》单元同步练习及答案
- 干部人事档案专项审核工作情况报告(8篇)
- 智慧校园信息化建设项目组织人员安排方案
- 多旋翼无人机驾驶员执照(CAAC)备考试题库大全-下部分
- 2024年青海一级健康管理师高频核心题库300题(含答案详解)
评论
0/150
提交评论