传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

一、平台现状

近年来由于信息科技的演进,在其推动下地理信息系统的应用也较以往更为广泛;而对于空间资料(Spatial Data)的生成也已从早期必须经由专家学者处理才能发布,到现在普通人只需要简单的工具,甚至是通过自动设备就有可能生成这些具有地理信息的资料。

        然而空间资料的建立仅仅是提供服务最基本的一环,如果需要将这些原始的资料转变成可以提供他人使用的服务,则需要额外的处理。完整的服务平台架构如下所示。分为用户端(Client)、应用服务(Application Services)和服务提供者(Service Provider)三个部分。

就目前市面上的商用软件而言,如果要建立地理信息的服务,已经存在很多种解决方案,在此不便评述。本文主要探讨的是如何通过整合开源软件(Open Source)来构建此服务平台。此外,笔者从事过Java EE和Android开发,对Java EE平台较为熟悉。结合近期的业务需求,需要提供一种基于Java EE标准体系的GIS解决方案。因此,期望通过本文的介绍,能给那些想要转型Web GIS应用的童鞋提供参考。


二、应用服务

        以一般的信息系统为例,即便后台拥有功能强大的服务器主机与系统,通过该系统可以处理想打庞大的资料,不过资料毕竟是要给人操作的,如何提供友好的用户界面也是相当关键的一环。对于地理信息系统,纵然我们拥有高效的服务器与强大的计算能力,也同样需要提供一个良好的操作界面给用户。

        在地理信息系统中,除了后台可以处理地图资源以外,在前端亦需要有一个合适的界面可以提供GIS的基本操作(如:缩放、平移、叠加图层等)。


OpenLayers

        OpenLayers是通过JavaScript脚本语言所开发的一种工具,提供丰富的地图资源支持,包含由ArcGIS Server所发布的资料(ArcGIS Cache)、服务(ArcGIS REST、ArcIMS等),对于其他在线地图服务(如:Google Map、Bing Map等)都有很好的支持。非常适合用于开发地理信息系统的用户界面。

三、服务提供者

        在地理信息系统中,如果需要将具有空间属性的资源显示在网络上,必须先借助适当的软件才能达到,通过客户端才能存取服务端提供的服务。


GeoServer

        GeoServer是一套由Java语言开发的免费软件,它提供分享和编辑具有空间信息的资源的功能。虽说它只是一套由社区所维护的软件,不过对于一般商用软件所具有的功能,它大多都也提供类似的服务。值得一提的是,由于它是免费软件,所以对于标准的交换格式也都支持。在GIS领域中,由开发地理空间协会(Open Geospatial Consortium)所订制的网络地图服务(Web Map Service,WMS)、网络图徽服务(Web Feature Service,WFS)、网络网格资源服务(Web Coverage Service,WCS)、KML等资源交换规范,GeoService都支持。

在地理信息系统中,为了让整个系统的实用性更高,往往都会搭配层叠丰富的形象资源,包含地图、卫星影像、航空照片影像等。然而,如果资源数量庞大到需要耗费时间才能通过网络传送,可以预见整个系统的效率会大幅度降低。为了解决加载大量地图资源的问题,瓦片地图(Map Tile)的技术相继被提出。

        瓦片地图就是将影像资源依据一定的比例尺、命名规则、存储目录结构等事先定义好的规范进行处理。当需要展示特定区域的资源时,仅取出该范围的若干片拼接在一起即可。如此一来,不仅可以节省即时处理庞大影像所花费的系统资源,而且大大降低了系统的延迟时间。因为图片资源都是已处理好的瓦片,获取时仅需通过服务器提供服务即可。

生成瓦片地图的机制多种多样,其中包括商用软件的解决方案(如:ESRI ArcGIS Server生成Cache的方式),或者开发者可以依照相关规范自行编写程序来生成切片;不过在免费软件中,也有提供类似服务的软件GeoWebCache。


GeoWebCache

        GeoWebCache是一个采用Java实现用于缓存WMS(Web Map Service)Tile的开源项目。当地图客户端请求一张新地图和Tile时,GeoWebCache将拦截这些调用然后返回缓存过的Tiles。如果找不到缓存再调用服务器上的Tiles,从而提高地图展示的速度。实现更好的用户体验。

针对大量数据的进行处理时,往往会使用数据库系统(DBMS)进行管理,以增强其运行效率。因此,数据库系统的使用在整个系统运行中是非常常见的一环。这类软件包括商用软件的解决方案,如:Oracle、SQL Server等,或者免费软件MySQL等。

        同样的问题也会出现在地理信息系统上,如果大量的数据需要存放在GIS上,采用原有的数据存储方式,系统的执行效率势必大大地降低。如果想要得到改善,就必须通过数据库系统来管理大量的数据资源。然而地理信息的资源与普通资源最大的差异,也就是再于地理信息资源中含有大量的空间属性。因此,被选为处理空间资源的数据库必须具有这项能力。

        近几年来,Orace数据库针对这个部分进行研发,诞生了Oracle Spatial;而Microsoft在新版本的SQL Server中也添加了处理空间属性的功能。对于免费数据库这块,PostgreSQL本身作为一个相当不错的数据库,再搭配PostGIS之后,也具有处理空间信息的能力。


PostgreSQL

        PostgreSQL是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一, 有着非常广泛的用户。PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。

四、总结

        由于地理信息技术的不断发展,GIS在开源软件阵营中也得到了长足的进步。开源软件的特点就是需要遵循一定的规范才能协同工作。故而,本文提供了一种基于Java EE标准体系的GIS服务平台架构:OpenLayers+GeoServer+GeoWebCache+PostgreSQL+Eclipse/MyEclipse+Tomcat/Jetty,同时对所涉及的软件进行了简单介绍和职责分派。说明了在不借助商用软件提供的解決方案的前提下,我们同样也可以构建出具有高效能品质的地理信息服务。

[置顶] 遵循Java EE标准体系的开源GIS服务平台架构的更多相关文章

  1. [置顶] 遵循Java EE标准体系的开源GIS服务平台之二:平台部署

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  2. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

  3. java EE技术体系——CLF平台API开发注意事项(1)——后端开发

    前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路.昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我, ...

  4. java EE技术体系——CLF平台API开发注意事项(2)——后端测试

    前言:上篇博客说到了关于开发中的一些情况,这篇博客主要说明一些关于测试的内容. 一.宏观说明 要求:每一个API都必须经过测试.   备注:如果涉及到服务间调用(如权限和基础数据),而对方服务不可用时 ...

  5. [置顶] 分析Java死锁:分析jstack日志

    本文中我将展示一段垃圾代码,这段代码会产生死锁,这样围绕这段代码重点展示三种不同的方法来分析线程日志,从而得知什么地方有问题. 下面的讨论将用到两个类 Account 和 DeadlockDemo c ...

  6. [置顶] 顿悟JAVA,自己实现Object的Clone的约束关系(上)

    因protected 的理解,顿悟一些JAVA的原理,模拟了Object类的子类为什么在调用clone方法前实现Cloneable接口. 这里不解释 ,上代码先. 运行效果 文件结构 调用类 pack ...

  7. [置顶] 自定义java Annotation快速入门与提高

    我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...

  8. [置顶] 浏览器模式和标准对于javascript的影响

    今天在编写代码的时候遇到了一个莫名其妙的问题,请看下面 <html> <head> <title> Test </title> <!--<m ...

  9. java EE技术体系——CLF平台API开发注意事项(3)——API安全访问控制

    前言:提离职了,嗯,这么多年了,真到了提离职的时候,心情真的很复杂.好吧,离职阶段需要把一些项目中的情况说明白讲清楚,这篇博客就简单说一下在平台中对API所做的安全处理(后面讲网关还要说,这里主要讲代 ...

随机推荐

  1. C#秘密武器之扩展方法

    原文:C#秘密武器之扩展方法 为何要用扩展方法? 作为一个.NET程序猿,我们经常要跟.net自带类库或者第三方dll类库打交道,有时候我们未必能够通过反编译来查看它们的代码,但是我们通常需要给它们扩 ...

  2. 安卓WindowManager注入事件如何跳出进程间安全限制

    在分析monkey源码的时候有些背景知识没有搞清楚,比如在看到monkey是使用windowmanager的injectKeyEvent方法注入事件的时候,心里就打了个疙瘩,这种方式不是只能在当前应用 ...

  3. C语言对mysql数据库的操作

    原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正 ...

  4. Dojo仪表板

    Dojo它提供了一个良好的仪表板显示器,的影响,如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR0lTU2hpWGlTaGVuZw==/font/ ...

  5. AMDBarUtility Update Ditection Page

    Current version is : #################### #060901# #################### DO NOT REPLY!!!

  6. 单独一个img标签的居中显示

    针对页面当中通过img插入图片的时候,要保证这个图片在页面内容当中居中,一般的做法是在外面套一个div,通过给div加入 {margin:0 auto;} 来控制图片的居中. 那么如果针对后台上传的图 ...

  7. Building Modern Web Apps-构建现代的 Web 应用程序

    Building Modern Web Apps-构建现代的 Web 应用程序 视频长度:1 小时左右 视频作者:Scott Hunter 和 Scott Hanselman 视频背景:Visual ...

  8. android的版本控制

    在一个团队项目中,项目的版本控制,一方面促进团队的协同能力,另一方面提高项目的进度 即使一个人的项目也最好使用SVN这样的版本控制,可以清楚的知道自己的修改的代码,和项目进度等.合理的托管,也让优秀的 ...

  9. javaIO流实现读写txt文件

    javaIO流实现文件读写 文件写入: InputStreamReader BufferedReader 文件读取: FileOutputStream package javatest.basic22 ...

  10. KMP算法详解-- 转自Matrix67

       6 7 8 9 --    A = a b a b  6 7  7 8 9 --    A = a b a b a  5 6 7  8 9 --    A = a b a b a b  6 7 ...