- 浏览: 217023 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
liminshaoye:
为什么我的一次成功之后就不能发送第二次了呢?
Java 使用SMSLib通过串口通讯收发短信 -
sziitjiang:
面试的题目,慢慢研究,还是能学到很多东西
JAVA 面试题 -
sziitjiang:
老大,我百度了一下SMG引擎,把你的博客给百度出来了!
SMG引擎 1.3.0 功能说明 -
jinkunaier:
,受教了!
深入探索SOAP1.1--使用SAAJ1.2.1 -
genggeng:
THX,对我入门很有帮助......
Java 使用SMSLib通过串口通讯收发短信
基于GeoServer的电子地图系统说明 基于GeoServer的电子地图系统说明
基于GeoServer的电子地图系统说明 基于GeoServer的电子地图系统说明
2010年4月20日
1,818 人浏览
评论
发表评论
概述
一AJAX的应用系统,前台页面基于OpenLayers2.2版本来开发,地图服务基于GeoServer1.5,后台查询基于Spring和Hibernate。前后台基于JSON方式进行通信。
注意:为了使代码有最大的安全和维护保障,前后台所有的文件存储和通信编码均为UTF-8(SLD文件有例外,另有说明),数据库编码安装时也指定为UTF-8。
关键词
开源软件 WebGIS OpenGIS PostgreSQL PostGIS GeoTools GeoServer uDig OpenLayers
目 录
一、OpenGIS相关概念知识
1.1 开源软件、Web技术相关
1.2 OpenGIS相关
二、相关软件介绍:
三、WebGIS相关的OpenGIS规范
3.1、WFS/WMS:
3.1.1、版本与流通:
3.1.2、请求规则:
3.1.3、响应规则:
3.1.4、WFS请求编码:
3.1.5、WFS名称空间:
3.1.6、坐标参考系统:
3.1.7、WFS操作:
3.2、空间数据格式WKB/WKT
四、PostgreSQL/PostGIS安装
五、空间数据库实现
5.1 Shapfile简介
5.2 用PostGIS管理空间数据
六、用uDig可视化生成SLD
七、基于GeoServer的WebGIS的实现
7.1 系统总体结构
7.2 GeoServer服务器端概览
7.3 GeoServer配置
八、用OpenLayers实现WebGIS客户端
8.1 OpenLayers简介
8.2 实例说明
九、附录
一、OpenGIS相关概念知识
1.1 开源软件、Web技术相关
GPL:GNU 全局公共许可证(General Public License)简称为GPL,是GNU的开源软件许可证的一种,大多数的 GNU 程序和超过半数的自由软件使用它。同时,它也是开源软件领域对许可人权力限制最严的许可证。GPL首先是承认软件的版权——软件有原始的版权所有者,然后 纳入自由软件的版权许可约束。在承认版权的前提下,通过软件的版权许可来实现自由权利的要求。GPL许可证最重要的特点在于它要求根据GPL许可证发布的 软件(如:最有影响力的Linux)修改、翻译的演绎作品,甚至只要其任何一部分代码是以GPL发布的,那么全部程序也必须受GPL许可证的约束,即继续遵守GPL许可证的规定,有些人将其称之为GPL的“病毒效应”。GeoTools、GeoServer都使用GPL授权协议。
AJAX:Asynchronous Javascript. and XML(异步Javascript和XML),AJAX是Web2.0时代的主要技术之一,它通过JS与服务器通信,中间传输数据使用XML(当然采用 XML不是必须的,如本系统为JSON),实现网页内容无刷新更新。网上地图的请求与显示通常采用此技术,最典型的如:Google Map。本文中的OpenLayers也使用了此技术。
JSON:JavaScript. Object Notation(JavaScript对象符号),JSON是一种用简单文本描述JavaScript对象的开放格式标准,它易于构建和解析。换句话 说,可以将发往浏览器的数据编码格式从XML改为JSON对象,而JSON对象能够很容易地转成JavaScript对象。
MVC设计模式: 模型-视图-控制(Model、View、Controller)的缩写。模型(Model)是应用程序的主体;视图(View)负责生成用户界面部分; 控制器可以根据用户的输入,控制用户界面数据显示及更新Model对象状态。MVC设计模式要求在应用程序开发中将模型逻辑,界面显示,数据层相分离。 MVC设计模式由事件驱动。OpenLayers就实现了这种设计模式。
1.2 OpenGIS相关
OGC:OpenGIS联盟。
WMS:Web Map Server 网上地图服务,最简单的功能就是:通过HTTP请求,获得相应的地图,地图为图片格式,如:JPG/GIF/PNG。
WFS:Web Feature Server 网上要素服务,最简单的功能就是:通过HTTP请求,获得相关的地理要素信息。
WCS:Web Coverage Server,简单地说就是对栅格数据的服务,它允许用户得到连续的栅格图像,这些图像可能包含多个波段,因此你可以将一幅完整的多波段遥感影像放到你的 WCS服务器上用WCS进行Internet共享,而用户利用浏览器或者其它胖客户端工具通过HTTP请求就可以得到这个影像数据。当然可以对请求参数进行限定,取得其中的一部分(空间的一部分或波段的一部分)数据。
SLD:风格化图层描述器(Styled Layer Descriptor)的简称,用于定义地图显示样式,GeoServer支持SLD,通过自定义SLD,可以在地图中显示文本和图片符号,还可以设置过滤器,自定义图例。
GML:地理标记语言,是WFS规范指定的地理要素的XML编码声明和数据格式。
WKB/WKT:OpenGIS规范定义了两种表达空间数据的标准方法:Well-Known Text (WKT) 和Well-Known Binary (WKB)
二、相关软件介绍:
2.1 GeoTools:一个基于JAVA的开源的GIS工具包,提供了实现OGC规范的一系列函数。是一个松散的工具包,用户可以调用其中的相应的包进行开发。Geoserver、uDig就是基于Geotools的。
2.2 GeoServer:GeoServer基于JAVA的开源软件,通过调用GeoTools,提供遵循OGC标准的WFS-T和WMS服务。其WMS结果的显示演示采用了OpenLayers。
2.3 OpenLayers:一个基于AJAX技术的网上地图显示客户端,支持WMS地图显示、WMS时间序列地图动态显示、GML/Feature数据显示等。
2.4 PostgreSQL/PostGIS:最先进的开源数据库,PostGIS是其在空间数据上的扩展。
三、WebGIS相关的OpenGIS规范
3.1、WFS/WMS:
3.1.1、版本与流通:
版本号为三段数字表示,现在(2006-5-17)WFS的最新版本是1.1.0,旧版本有0.9.1、1.0.0;WMS的版本有:1.0、1.1、1.1.1、1.3.0。Geoserver支持WFS1.0、WMS1.1.1,其返回的GML版本是2.1.2。
版本号必须出现在两个地方,一是客户端请求参数中、再是服务器GetCapabilities 操作返回的Capabilities XML文档中。
需要注意的是,客户端请求的版本号应该与服务器支持的版本号匹配,否则按最近匹配原则:
1、 如果客户端请求的版本号高于服务器支持的,服务器按其支持的最高的版本号执行,相反,则按最低版本号执行。
2、 如果服务器响应的版本号高于客户端支持的,客户端会重新发送一个较低版本号的请求,相反,发送一个较高的版本。
3.1.2、请求规则:有两种请求方式:Get、Post。
WFS的Post请求是提交一个符合WFS规范的XML文本,服务器来对这个XML文本进行解析后执行,下面是两个Get请求:
请求一:
http://127.0.0.1/geoserver/wfs? request=GetCapabilities&service=WFS&version=1.0.0
解释说明:
操作:GetCapabilities
服务:WFS
版本:1.0.0
请求二:
http://127.0.0.1/geoserver/wms?VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS
&SRS=EPSG:4326&BBOX=146.9632808102,-42.2041379916633,147.0813008202,-42.1368665859633&WIDTH=500&HEIGHT=285&LAYERS=topp:tasmania_roads
&FORMAT=image/png&STYLES=&TRANSPARENT=TRUE&TIME=
解释说明:
version=1.1.1 版本号为1.1.1
request=GetMap 执行GetMap操作
服务:WMS
坐标参考系统为EPSG:4326
地图范围:
地图大小:500*285
图层:topp:Tasmania_roads
地图格式:png
地图样式:默认样式
透明显示:是
3.1.3、响应规则:
如果请求正常,服务器将返回一个对象,并伴随这个对象的MIME(多用途因特网邮件扩展,常用的文件格式都伴随着一个MIME类型,如邮件附件,GIF图片image/gif)类型和描述(如对象大小、编码类型等等)。否则,应该返回一个服务器异常。
3.1.4、WFS请求编码:
规范定义了两种WFS请求编码方法,一是使用XML,二是使用KVP(键值对)
WFS操作与请求编码: 操作
请求编码
GetCapabilities
XML & KVP
DescribeFeatureType
XML & KVP
GetFeature / GetFeatureWithLock
XML & KVP
LockFeature
XML & KVP
Transaction
XML & limited KVP
3.1.5、WFS名称空间:有三个标准化的名称空间:
(http://www.opengis.net/wfs) – for the WFS interface vocabulary
(http://www.opengis.net/gml) – for the GML vocabulary
(http://www.opengis.net/ogc) – for the OGC Filter vocabulary
3.1.6、坐标参考系统:
使用EPSG 标准,其值通常是4326。
3.1.7、WFS操作:
DescribeFeatureType (要素类型特征描述)操作:此操作产生一个WFS服务器所提供的地理要素的大纲描述,这个描述定义了WFS地理要素实例怎样被输入、编译和输出。对于一个 DescribeFeatureType请求,应返回一个由XML Schema定义的GML3应用程序大纲。
GetFeature(获取对象) 操作:因为地理要素的规范表示是使用GML,所以GetFeature操作涉及到GML规范中的地理要素模型。在GML中,一个地理要素表现为XML文档 中的一个元素,一个GML文档可包含多个地理要素。当GetFeature请求的输出格式设为text/gml; subtype=gml/3.1.1时,一个GML实例将被返回给客户端。
GetGMLObject(获取GML对象) 操作:允许通过ID号从服务器上获取地理要素和元素,该操作将返回一个XML片段。注意GetGMLObject操作不是可选的,不是服务器必需支持的。
LockFeature (锁定要素)操作:网络连接本身是不稳定的,要实现事务操作的正确执行,解决并发冲突问题,需要锁定地理要素,这类似数据库中的相关操作(实际上也确实是一种空间数据库操作)。
Transaction(事务操作):事务操作描述了从网上获得的地理要素实例的数据事务操作。当事务操作完成时,WFS服务器将返回一个XML文档指示事务的完成状况。
GetCapabilities(获取服务能力)操作:任何OGC的web服务器,包括WFS、WMS,必须提供GetCapabilities操作,用于描绘服务器性能容量。GetCapabilities请求将返回服务器元数据。
3.1.8、WMS操作:
GetCapabilities(强制)操作:反映服务器性能信息,与WFS的GetCapabilities操作相似。
GetMap(强制)操作:返回地图,这是最常用的操作,可参考前面请求规则的请求二例子。
GetFeatureinfo(可选):该操作是可选操作,能提供给客户端更多地理要素的信息,如在客户端选择地图上某一点,GetFeatureinfo操作可以返回该点的相关信息。
3.2、空间数据格式WKB/WKT
OpenGIS 规范定义了两种表达空间数据的标准方法:Well-Known Text (WKT) 和Well-Known Binary (WKB) 形式。WKT和WKB都包括对象的类型和坐标系。OpenGIS规范还需要空间对象的internal存储格式包括空间参考系统标示符(SRID),在空 间对象装入数据库时需要提供SRID。
OGC的更多信息,请访问:http://www.opengeospatial.org
四、PostgreSQL/PostGIS安装
有一些图没有截下来,本人已在FreeBSD下装过,其实读一下软件的安装说明就可以了,很简单。
登录http://www.postgresql.org,下载最新版的PostgreSQL数据库,此安装文件已包含PostGIS(必须下载8.2以上版本,不可下载8.1版,经测试8.1版对数据的备份和恢复存在问题,恢复备份数据时不能正确恢复数据表的主键)。
开始安装
首先是选择安装过程中使用的语言,没有找到中文,只好选择还能看得懂的英文。另外,你可以选择最下面得选项以把详细的安装日志写到当前安装目录,以备排查安装故障,也可以阅读一下了解它的安装过程。
选择安装语言
点下一步就是选择安装内容的选项了,其中分四大部分,分别是数据库服务器端、用户界面、数据库驱动和开发模块。你可以根据需要选择安装。另外此处要注意的是“Data directory”选项只能安装在NTFS格式的分区,如果你要安装在其他格式的分区的话,需要在安装完后,手动运行Initdb.exe。
注意:如果你喜欢用图形界面来管理操作数据库得话,在用户界面里可以选择安装pgAdminIII。PostGIS Spatial Extension为PostgreSQL提供了GIS支持(PostGIS),这里必须要安装。
选择安装选项1
选择安装选项2
接下来是服务配置,你可以把该数据库服务器作为Windows的一个系统服务运行,这也是PostgreSQL开始真正支持Windows安装的一个体现(如下图)。
选择安装为服务
在此设置服务名,还有运行该服务的Windows帐号。你可以输入一个已有帐号,也可以输入一个目前并不存在的帐号,让安装程序自动建立这个帐号。
自动创建帐号
创建帐号完毕后,就是要配置数据库的监听端口、连接许可,及本地区域和超级用户的设置了。我选择的是“中华人民共和国”,选择编码类型为UTF-8,(注意:图上为SQL_ASCII务必改之)这儿建立的超级帐号是数据库管理员用户,注意与前面的服务帐号区别。注意这个对话框只有你在上一步选择了让PostgreSQL作为一个系统服务运行才会出现。
初始化数据库设置
点击下一步后,会弹出一个远程连接的选项,提示本地连接数据库默认都可以被接受,但是如果想让远程计算机也能连接到数据库的话,你需要在安装完成后,单独设置pg_hba.conf文件,具体设置我们在后面再说明。
选择在默认创建的测试数据库template1中激活的过程语言,我这儿只选择了pgsql了。注意这个对话框只有你在选择了让PostgreSQL作为一个系统服务运行,并且选择了初始化数据库组件后才会出现。
选择过程语言
选择在测试数据库template1中激活的模块,所有的扩展文件都是会被安装上,这一步只是选择在你所有的数据库中默认激活哪些模块。这些扩展模块能提供一些增强的功能。(基本上默认就行了)
选择加载扩展模块
至此安装配置参数就已经配完了,你只需要点下一步等待安装完成就可以了,PostgreSQL安装速度很快,根据机器不同时间略有不同。最后出现安装成功界面。
客户端连接设置
PostgreSQL出于安全考虑,默认是拒绝所有远程客户端的连接的,如果你要想远程登录服务器端的话,需要设置pg_hba.conf,从开始菜单–>程序–>PostgreSQL–>configuration files中选择编辑pg_hba.conf。
编辑pg_hba.conf
修改为如下内容:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.1.113/32 md5
这样表示本机和192.168.1.113这台机器可以通过经过MD5加密的密码连接数据库。通过修改IP地址的掩码,也可以允许哪一个段的地址可以连接服务器。另外,认证方式MD5还可以改为trust,表示完全信任这个地址的连接(这一点在调试程序时比较方便)。改为password,表示通过密码连接,但是密码以明文方式发送。设置完后,需要重新启动PostgreSQL才能生效。
五、空间数据库实现
正在研究这部分内容,希望能尽快完成空间数据库设计和实现,到时候再总结。
5.1 Shapfile简介
本系统的Shapfile(简称SHP)文件由河北省测绘局提供。
Shapfile文件为ESRI公司的文件存储格式,并且得到了业界广泛的支持。Shapfile格式是一种简单的,用非拓朴关系的形式存储几何位置和地理特征的属性信息的格式。虽然GeoServer采用Shapfile文件可以快速的创建网上地图服务,但它的缺点确很明显:
1、Shapefile只支持一个图层,在实际中没有意义。
2、直接保用SHP文件不安全,Shapfile文件很容易被病毒或其他原因误删除。
3、GeoServer中用Shapfile文件作数据源的效率是很低的。
4、Shapfile中的汉字GeoServer不能解析,会出现乱码。
5、数据库可以方便的对地理信息进行查询。
5.2 用PostGIS管理空间数据
PostGIS支持GIST空间索引(附录1)、规范窗体,能很大的提高处理效率。
OGC格式只提供二维的几何体,且相关联的SRID从未深入的用于输入输出请求,PostGIS支持OpenGIS组织"Simple Features for SQL"规范指定的所有GIS对象和函数,并进行了扩展,格式是EWKB、EWKT,其中增加了对3DZ,3DM和4D 坐标系的支持(当然三维、四维数据的OGC标准还未完全制定),深入引进了SRID信息。
空间数据表结构:PostGIS中存在两个必需的元数据表格, SPATIAL_REF_SYS(空间参考表格) 和 GEOMETRY_COLUMNS(几何体属性列),两个表用于存储空间数据库使用的坐标系统数字ID和文本描述。
PostGIS的shp2pgsql命令可以将Shapfile直接导入到数据库中也可以导出为SQL文件,推荐先导出为SQL文件再将此文件在SQL运行窗口中执行可将数据导入数据库。代码如下:
Shapfile到SQL语句:
shp2pgsql 路径\shp数据文件名 新建的数据表名 > 路径\SQL文件名.sql
Shapfile直接入库:
shp2pgsql -c 路径\shp数据文件名 新建的数据表名 数据库名|psql -d 数据库名
举例说明:
如将一Shapfile文件“c:\road.shp”导入到数据表“road”中,数据库为“sjzmap”。
1、运行“命令提示符”。
2、切换至PostgreSQL数据库安装目录中的bin目录下。
3、执行此目录下的shp2pgsql命令:“shp2pgsql c:\road.shp road > c:\road.sql”。
4、如将此文件直接导入数据库(不推荐):“shp2pgsql -c c:\road.shp road sjzmap | psql -d sjzmap”。
六、用uDig可视化生成SLD
登录http://udig.refractions.net,下载安装最新版的uDig(User-friendly Desktop Internet GIS):用户友好桌面因特网GIS。
uDig是基于EclipseRCP和GeoTools开发的,支持OpenGIS组织发布的公共标准,尤其支持WMS、WFS标准。它既是一个应用程序,也可以作为开发新的桌面因特网GIS应用程序的核心平台,我们用uDig只是为了方便的对地图进行可视化的配色,方便编辑SLD样式文件。下面以配置PostGIS中的“base_road”图层为例进行说明。
打开uDig新建一个工程“test_map”
新建工程“test_map”
从“菜单->Layer->Add…”中,按照向导添加PostGIS图层“base_road”,添加成功后如下图:
添加“base_road”图层后的uDig
uDig会为图层生成随机的样式,下面我们将更改默认的样式。从左下角的“Layers”框中选中“base_road”图层,点击按钮或者选择“Layer->Change Style…”会弹出“Style. Editor”对话框。左侧的Simple中可以调教图层的各种配色,点击XML可以查看生成的SLD文件,挑选合适的配色后点击Export就可将此SLD文件导出。导出的SLD文件可以在GeoServer中直接使用,但是这时的样式与图层数据表的名称是相关联的,通用性较差。为了获得最好的通用性,请将此文件参照GeoServer样例的SLD文件手工进行代码优化后再导入GeoServer。
注意:SLD文件中有汉字时不可存为UTF-8编码必须存为GBK/GB2312编码,因为GeoServer导入有汉字的UTF-8编码的SLD样式文件时会报错。
对应当前样式的SLD文件
七、基于GeoServer的WebGIS的实现(我选择的是MapServer,基于C的)
登录http://www.geoserver.org,下载最新版的GeoServer。
安装:有两种方式安装,一种是使用它的安装程序(.exe 文件),这种方式安装的GeoServer自带web服务器,可以独立运行(需要JDK环境),默认端口是8080;另一种安装方法是使用Tomcat (或其它web服务器,具体可以从GeoServer官方网站上查看web服务器的支持列表),将geoserver.war文件放置在webapps目 录下即可。
7.1 系统总体结构
GeoServer是完全基于JAVA的,WebGIS服务(WMS、WFS)可通过Servlet实现访问,地址是:/GeoServer/wms 、/GeoServer/wfs。访问规则见前节(WebGIS相关的OpenGIS规范)。
整体结构如下:
GeoServer结构:
下面是GeoServer实现的网上地图服务以及相关操作:
WFS UML 图表 (选自GeoServer参考文档)
WMS UML 图表 (选自GeoServer参考文档)
以上可以看出,GeoServer完全实现了OGC相关规范。
7.2 GeoServer服务器端概览
要提供WebGIS 服务首先须配置GeoServer,GeoServer提供Web界面进行管理,进入:http://host:port/geoserver,点击“登 录”进入登录界面,默认用户和密码分别是admin、geoserver。点击“配置”进入配置界面,有五个栏目可以配置:
7.2.1、服务器:
可以设置服务器信息和联系信息,前者包括:最大地理要素数限制、是否显示 详细异常信息、数字精度(几位小数)、语言编码(为支持多国化,可设置为UTF-8)、日志相关等,后者包括单位名称、地址、联系方式等。
7.2.2、WCS:
WCS的相关信息,可以查看安装的Coverage插件列表。
7.2.3、WFS:
可以设置WFS相关信息,包括:是否启用WFS服务、服务层次(基本服务、事务处理层次、完全服务)、以及WFS服务器描述信息和Test Suites 的使用。
7.2.4、WMS:
设置内容包括:是否启用WMS服务,描述信息,SVG图形表现形式(简单描绘还是蜡染色法表现、是否采用抗锯齿处理)
7.2.5、数据:
数据配置的内容较多也是我们主要用到的,分六部分:名称空间、Coverage库、数据库、样式、地图要素类型(FeatureTypes)、Coverages,具体的数据配置会在下面的7.3节进行实例说明。
7.3 GeoServer配置
Shapefile 导入到PostgreSQL数据库,再为其编写好样式后就可以在GeoServer中配置了。地图图层的所有配置都是在“配置->数据”中,这里分为六个 部分,其中“Coverage库”和“Coverages”为删格数据的配置,以下实例说明中不会涉及。
下面以配置图层“base_road”为例进行说明:
1、新建一个名称空间,并设置前缀为“sjz”,其URI为http://www.hbsanctum.com/sjz,并设为默认的名称空间,提交并保存。(注意:界面左上角有“应用”、“保存”和“载入”三个按钮,提交后必须先点“应用”成功后再点“保存”,以下各步骤的操作均按此执行。)
2、在“数据库”中创建一个新的Feature数据集,“Feature数据描述”中选择“Postgis”,“Feature数据集 ID”同样命名为“sjz”,点击“新建”按钮后转到Feature数据集编辑器中,在此编辑器中正确添写PostgreSQL的连接信息后提交数据。
3、新建地图样式,GeoServer支持SLD来修饰地图,这里将自定义一个base_road.sld文件,上传并注册到GeoServer,样式名设为base_road。
4、设置好了数据源和地图样式,接下来要完成最后的工作,新建一个FeatureType 选择数据源为:sjz:::base_road,地图样式选择base_road,SRS设置为:4326,点击“生成”,GeoServer将自动填写地图范围和相关信息。此外还可以设置标题、关键词、Schema基础、摘要……提交并保存。
GeoServer1.5采用了OpenLayers来显示图层,现在我们可以从“欢迎->样例->地图预览”查看刚才配置的图层了。
八、用OpenLayers实现WebGIS客户端
8.1 OpenLayers简介
登录http://www.openlayers.org,下载OpenLayers的压缩包。
OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers实现访问地理空间数据的方法都符合行业标准。比如OpenGIS的WMS和WFS规范。OpenLayers采用面向对象方式开发,并使用来自Prototype.js和Rico中的一些组件。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一方面OpenLayers提供了非常多的选择。
从OpenLayers2.2版本以后,OpenLayers已经将所用到的Prototype.js组件整合到了自身当中,并不断在Prototype.js的基础上完善面向对象的开发,Rico用到地方不多,只是在OpenLayers.Popup.AnchoredBubble类中圆角化DIV。OpenLayers2.4版本以后提供了矢量画图功能,方便动态地展现“点、线和面”这样的地理数据。
8.2 实例说明
以创建一个index.html作为查看地图的页面为例。导入OpenLayers.js和你将要创建的js。内容需要一个div,我们给它的id起名叫做area。你有必要在写一些CSS限定#area的宽度和高度,如果乐意,加上一个border也是很不错的选择。
我们首先要创建一个OpenLayer.Map对象的实例:
var map = new OpenLayers.Map("area");
其中的参数可以传id,也可以传ElementObject,当然id更加方便一些。
接下来就是向地图中添加图层,通常情况下使用OpenLayers.Layer的子类来完成图层的初始化。
OpenLayers提供了一下Layers的扩展:
OpenLayers.Layer.Image
OpenLayers.Layer.HTTPRequest
OpenLayers.Layer.Grid
OpenLayers.Layer.WMS
OpenLayers.Layer.KaMap
OpenLayers.Layer.EventPane
OpenLayers.Layer.Google
OpenLayers.Layer.VirtualEarth
OpenLayers.Layer.Markers
OpenLayers.Layer.Text
OpenLayers.Layer.GeoRSS
OpenLayers.Layer.Boxes
OpenLayers.Layer.TMS
Image类封装一个实际图象作为图曾内容
HTTPRequest类可以接收一个动态生成的图片,你可以通过HTTPRequest类的参数向服务器发送参数
Grid类是HTTPRequest类的子类,提供更加详细的方法
WMS类用于连接WMS服务器以获得图象
KaMap类用于连接MapServer
EventPane类作为用于接收用户操作的图层
Google类用于从Google获得图象,它仍然需要你从Google获得API KEY,并且include
VirtualEarth类用于操作VirtualEarth的图层
Markers类用于生成接收和显示用户本地标记的图层
Text类用于接收CSV文件
GeoRSS类是Marker类的子类,用于封装接收GeoRSS并在图层中作出marker
Boxes同样也是Marker类的子类,可以用div来做marker,而非image
TMS用于接收TMS服务器的地图
创建完图层后,可以用Map的addLayer(layer)方法插入,并执行Map的zoomToMaxExtent()方法让地图合适地显示。
OpenLayers还提供了丰富的Control类为地图浏览添加一些工具,继承自OpenLayers.Control类
OpenLayers.Control.LayerSwitcher
OpenLayers.Control.MouseDefaults
OpenLayers.Control.MousePosition
OpenLayers.Control.MouseToolbar
OpenLayers.Control.OverviewMap
OpenLayers.Control.PanZoom
OpenLayers.Control.PanZoomBar
OpenLayers.Control.Permalink
OpenLayers.Control.Scale
这些类的实例会在地图浏览的“窗口”上增加一些工具栏或是“按钮”,增加互动性和功能性。
OpenLayers对常用的数据结构进行了封装
OpenLayers.LonLat
OpenLayers.Size
OpenLayers.Pixel
OpenLayers.Bounds
以便于操作。
此外OpenLayers.Util类可以对图片载入错误时图片框的颜色和图片框中默认的图片进行自定义,这一点是非常方便的。OpenLayers的Ajax类对创建XMLHttpRequest对象的过程进行了封装,可以使用它进行简单的Ajax操作。
九、附录
1. 相关概念
GIST
http://man.chinaunix.net/database/postgresql_8.0_CN/gist.html
GiST 的意思是通用的搜索树(Generalized Search Tree)。 它是一种平衡的,树状结构的访问方法,在系统中起一个基础的模版,然后可以 使用它实现任意索引模式。B+-trees,R-trees 和许多其它的索引模式都可以用 GiST 实现。
GiST 的一个优点是它允许一种客户化的数据类型和合适的 访问方法一起开发,并且是由该数据类型范畴里的专家,而不是数据库专家开发。
有些信息是从 加州大学伯克力分校的 GiST 项目网站 和 Marcel Kornacker 的论文,Access Methods for Next-Generation Database Systems 中派生的。
PostgreSQL 里的 GiST 实现目前主要是 Teodor Sigae 和 Oleg Bartunov 维护的, 在他们的网站上有更多信息:http://www.sai.msu.su/~megera/postgres/gist/。
R-TREE
R-tree 索引用于索引空间数据。一个哈希索引无法处理范围搜索。而 B-tree 索引只能处理一维的范围搜索。R-tree 索引可以处理多维数据。例如,如果可以在一个类型为 point 的字段上建立一个 R-tree 索引,那么系统在回答类似 select all points within a bounding rectangle (选择在一个长方形范围内的所有点)这样的查询时有更高的效率。
建立 R-Trees 可以处理多边形和方形。理论上说,R-trees 可以扩展为处理更多维数。不过在实践上,扩展R-trees 需要一定的工作量。
WKB
Well Known Binary 一种GIS数据的二进制存储方式。
WKT
Well Known Text
reprojection
重投影
SPATIAL_REF_SYS Table
空间参考系统表格(SPATIAL_REF_SYS)用来储存空间参考系统资讯,表格结构如下:其中SRID为空间参考系统代码,AUTH_NAME为空间参考系统之坐标名称,AUTH_SRID为空间参考系统之坐标名称代码,SRTEXT为空间参考系统之WKT(Well-known Text)文字方式格式。空间参考系统之WKT资料结构包括空间。
coordinates
坐标系
features
几何元素
SRID
spatial referencing system identifier空间参考系统标示符。
populates
填充
schema
大纲
meta-data
元数据
2. 相关网站和讨论组
OGC官方网站:http://www.opengis.org
PostgreSQL官方网站:http://www.postgresql.org
uDig官方网站:http://udig.refractions.net
GeoServer官方网站:http://www.geoserver.org
OpenLayers官方网站:http://www.openlayers.org
GeoTools官方网站:http://www.geotools.org
GeoServer q群:4825849
2010年4月20日
1,818 人浏览
评论
发表评论
概述
一AJAX的应用系统,前台页面基于OpenLayers2.2版本来开发,地图服务基于GeoServer1.5,后台查询基于Spring和Hibernate。前后台基于JSON方式进行通信。
注意:为了使代码有最大的安全和维护保障,前后台所有的文件存储和通信编码均为UTF-8(SLD文件有例外,另有说明),数据库编码安装时也指定为UTF-8。
关键词
开源软件 WebGIS OpenGIS PostgreSQL PostGIS GeoTools GeoServer uDig OpenLayers
目 录
一、OpenGIS相关概念知识
1.1 开源软件、Web技术相关
1.2 OpenGIS相关
二、相关软件介绍:
三、WebGIS相关的OpenGIS规范
3.1、WFS/WMS:
3.1.1、版本与流通:
3.1.2、请求规则:
3.1.3、响应规则:
3.1.4、WFS请求编码:
3.1.5、WFS名称空间:
3.1.6、坐标参考系统:
3.1.7、WFS操作:
3.2、空间数据格式WKB/WKT
四、PostgreSQL/PostGIS安装
五、空间数据库实现
5.1 Shapfile简介
5.2 用PostGIS管理空间数据
六、用uDig可视化生成SLD
七、基于GeoServer的WebGIS的实现
7.1 系统总体结构
7.2 GeoServer服务器端概览
7.3 GeoServer配置
八、用OpenLayers实现WebGIS客户端
8.1 OpenLayers简介
8.2 实例说明
九、附录
一、OpenGIS相关概念知识
1.1 开源软件、Web技术相关
GPL:GNU 全局公共许可证(General Public License)简称为GPL,是GNU的开源软件许可证的一种,大多数的 GNU 程序和超过半数的自由软件使用它。同时,它也是开源软件领域对许可人权力限制最严的许可证。GPL首先是承认软件的版权——软件有原始的版权所有者,然后 纳入自由软件的版权许可约束。在承认版权的前提下,通过软件的版权许可来实现自由权利的要求。GPL许可证最重要的特点在于它要求根据GPL许可证发布的 软件(如:最有影响力的Linux)修改、翻译的演绎作品,甚至只要其任何一部分代码是以GPL发布的,那么全部程序也必须受GPL许可证的约束,即继续遵守GPL许可证的规定,有些人将其称之为GPL的“病毒效应”。GeoTools、GeoServer都使用GPL授权协议。
AJAX:Asynchronous Javascript. and XML(异步Javascript和XML),AJAX是Web2.0时代的主要技术之一,它通过JS与服务器通信,中间传输数据使用XML(当然采用 XML不是必须的,如本系统为JSON),实现网页内容无刷新更新。网上地图的请求与显示通常采用此技术,最典型的如:Google Map。本文中的OpenLayers也使用了此技术。
JSON:JavaScript. Object Notation(JavaScript对象符号),JSON是一种用简单文本描述JavaScript对象的开放格式标准,它易于构建和解析。换句话 说,可以将发往浏览器的数据编码格式从XML改为JSON对象,而JSON对象能够很容易地转成JavaScript对象。
MVC设计模式: 模型-视图-控制(Model、View、Controller)的缩写。模型(Model)是应用程序的主体;视图(View)负责生成用户界面部分; 控制器可以根据用户的输入,控制用户界面数据显示及更新Model对象状态。MVC设计模式要求在应用程序开发中将模型逻辑,界面显示,数据层相分离。 MVC设计模式由事件驱动。OpenLayers就实现了这种设计模式。
1.2 OpenGIS相关
OGC:OpenGIS联盟。
WMS:Web Map Server 网上地图服务,最简单的功能就是:通过HTTP请求,获得相应的地图,地图为图片格式,如:JPG/GIF/PNG。
WFS:Web Feature Server 网上要素服务,最简单的功能就是:通过HTTP请求,获得相关的地理要素信息。
WCS:Web Coverage Server,简单地说就是对栅格数据的服务,它允许用户得到连续的栅格图像,这些图像可能包含多个波段,因此你可以将一幅完整的多波段遥感影像放到你的 WCS服务器上用WCS进行Internet共享,而用户利用浏览器或者其它胖客户端工具通过HTTP请求就可以得到这个影像数据。当然可以对请求参数进行限定,取得其中的一部分(空间的一部分或波段的一部分)数据。
SLD:风格化图层描述器(Styled Layer Descriptor)的简称,用于定义地图显示样式,GeoServer支持SLD,通过自定义SLD,可以在地图中显示文本和图片符号,还可以设置过滤器,自定义图例。
GML:地理标记语言,是WFS规范指定的地理要素的XML编码声明和数据格式。
WKB/WKT:OpenGIS规范定义了两种表达空间数据的标准方法:Well-Known Text (WKT) 和Well-Known Binary (WKB)
二、相关软件介绍:
2.1 GeoTools:一个基于JAVA的开源的GIS工具包,提供了实现OGC规范的一系列函数。是一个松散的工具包,用户可以调用其中的相应的包进行开发。Geoserver、uDig就是基于Geotools的。
2.2 GeoServer:GeoServer基于JAVA的开源软件,通过调用GeoTools,提供遵循OGC标准的WFS-T和WMS服务。其WMS结果的显示演示采用了OpenLayers。
2.3 OpenLayers:一个基于AJAX技术的网上地图显示客户端,支持WMS地图显示、WMS时间序列地图动态显示、GML/Feature数据显示等。
2.4 PostgreSQL/PostGIS:最先进的开源数据库,PostGIS是其在空间数据上的扩展。
三、WebGIS相关的OpenGIS规范
3.1、WFS/WMS:
3.1.1、版本与流通:
版本号为三段数字表示,现在(2006-5-17)WFS的最新版本是1.1.0,旧版本有0.9.1、1.0.0;WMS的版本有:1.0、1.1、1.1.1、1.3.0。Geoserver支持WFS1.0、WMS1.1.1,其返回的GML版本是2.1.2。
版本号必须出现在两个地方,一是客户端请求参数中、再是服务器GetCapabilities 操作返回的Capabilities XML文档中。
需要注意的是,客户端请求的版本号应该与服务器支持的版本号匹配,否则按最近匹配原则:
1、 如果客户端请求的版本号高于服务器支持的,服务器按其支持的最高的版本号执行,相反,则按最低版本号执行。
2、 如果服务器响应的版本号高于客户端支持的,客户端会重新发送一个较低版本号的请求,相反,发送一个较高的版本。
3.1.2、请求规则:有两种请求方式:Get、Post。
WFS的Post请求是提交一个符合WFS规范的XML文本,服务器来对这个XML文本进行解析后执行,下面是两个Get请求:
请求一:
http://127.0.0.1/geoserver/wfs? request=GetCapabilities&service=WFS&version=1.0.0
解释说明:
操作:GetCapabilities
服务:WFS
版本:1.0.0
请求二:
http://127.0.0.1/geoserver/wms?VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS
&SRS=EPSG:4326&BBOX=146.9632808102,-42.2041379916633,147.0813008202,-42.1368665859633&WIDTH=500&HEIGHT=285&LAYERS=topp:tasmania_roads
&FORMAT=image/png&STYLES=&TRANSPARENT=TRUE&TIME=
解释说明:
version=1.1.1 版本号为1.1.1
request=GetMap 执行GetMap操作
服务:WMS
坐标参考系统为EPSG:4326
地图范围:
地图大小:500*285
图层:topp:Tasmania_roads
地图格式:png
地图样式:默认样式
透明显示:是
3.1.3、响应规则:
如果请求正常,服务器将返回一个对象,并伴随这个对象的MIME(多用途因特网邮件扩展,常用的文件格式都伴随着一个MIME类型,如邮件附件,GIF图片image/gif)类型和描述(如对象大小、编码类型等等)。否则,应该返回一个服务器异常。
3.1.4、WFS请求编码:
规范定义了两种WFS请求编码方法,一是使用XML,二是使用KVP(键值对)
WFS操作与请求编码: 操作
请求编码
GetCapabilities
XML & KVP
DescribeFeatureType
XML & KVP
GetFeature / GetFeatureWithLock
XML & KVP
LockFeature
XML & KVP
Transaction
XML & limited KVP
3.1.5、WFS名称空间:有三个标准化的名称空间:
(http://www.opengis.net/wfs) – for the WFS interface vocabulary
(http://www.opengis.net/gml) – for the GML vocabulary
(http://www.opengis.net/ogc) – for the OGC Filter vocabulary
3.1.6、坐标参考系统:
使用EPSG 标准,其值通常是4326。
3.1.7、WFS操作:
DescribeFeatureType (要素类型特征描述)操作:此操作产生一个WFS服务器所提供的地理要素的大纲描述,这个描述定义了WFS地理要素实例怎样被输入、编译和输出。对于一个 DescribeFeatureType请求,应返回一个由XML Schema定义的GML3应用程序大纲。
GetFeature(获取对象) 操作:因为地理要素的规范表示是使用GML,所以GetFeature操作涉及到GML规范中的地理要素模型。在GML中,一个地理要素表现为XML文档 中的一个元素,一个GML文档可包含多个地理要素。当GetFeature请求的输出格式设为text/gml; subtype=gml/3.1.1时,一个GML实例将被返回给客户端。
GetGMLObject(获取GML对象) 操作:允许通过ID号从服务器上获取地理要素和元素,该操作将返回一个XML片段。注意GetGMLObject操作不是可选的,不是服务器必需支持的。
LockFeature (锁定要素)操作:网络连接本身是不稳定的,要实现事务操作的正确执行,解决并发冲突问题,需要锁定地理要素,这类似数据库中的相关操作(实际上也确实是一种空间数据库操作)。
Transaction(事务操作):事务操作描述了从网上获得的地理要素实例的数据事务操作。当事务操作完成时,WFS服务器将返回一个XML文档指示事务的完成状况。
GetCapabilities(获取服务能力)操作:任何OGC的web服务器,包括WFS、WMS,必须提供GetCapabilities操作,用于描绘服务器性能容量。GetCapabilities请求将返回服务器元数据。
3.1.8、WMS操作:
GetCapabilities(强制)操作:反映服务器性能信息,与WFS的GetCapabilities操作相似。
GetMap(强制)操作:返回地图,这是最常用的操作,可参考前面请求规则的请求二例子。
GetFeatureinfo(可选):该操作是可选操作,能提供给客户端更多地理要素的信息,如在客户端选择地图上某一点,GetFeatureinfo操作可以返回该点的相关信息。
3.2、空间数据格式WKB/WKT
OpenGIS 规范定义了两种表达空间数据的标准方法:Well-Known Text (WKT) 和Well-Known Binary (WKB) 形式。WKT和WKB都包括对象的类型和坐标系。OpenGIS规范还需要空间对象的internal存储格式包括空间参考系统标示符(SRID),在空 间对象装入数据库时需要提供SRID。
OGC的更多信息,请访问:http://www.opengeospatial.org
四、PostgreSQL/PostGIS安装
有一些图没有截下来,本人已在FreeBSD下装过,其实读一下软件的安装说明就可以了,很简单。
登录http://www.postgresql.org,下载最新版的PostgreSQL数据库,此安装文件已包含PostGIS(必须下载8.2以上版本,不可下载8.1版,经测试8.1版对数据的备份和恢复存在问题,恢复备份数据时不能正确恢复数据表的主键)。
开始安装
首先是选择安装过程中使用的语言,没有找到中文,只好选择还能看得懂的英文。另外,你可以选择最下面得选项以把详细的安装日志写到当前安装目录,以备排查安装故障,也可以阅读一下了解它的安装过程。
选择安装语言
点下一步就是选择安装内容的选项了,其中分四大部分,分别是数据库服务器端、用户界面、数据库驱动和开发模块。你可以根据需要选择安装。另外此处要注意的是“Data directory”选项只能安装在NTFS格式的分区,如果你要安装在其他格式的分区的话,需要在安装完后,手动运行Initdb.exe。
注意:如果你喜欢用图形界面来管理操作数据库得话,在用户界面里可以选择安装pgAdminIII。PostGIS Spatial Extension为PostgreSQL提供了GIS支持(PostGIS),这里必须要安装。
选择安装选项1
选择安装选项2
接下来是服务配置,你可以把该数据库服务器作为Windows的一个系统服务运行,这也是PostgreSQL开始真正支持Windows安装的一个体现(如下图)。
选择安装为服务
在此设置服务名,还有运行该服务的Windows帐号。你可以输入一个已有帐号,也可以输入一个目前并不存在的帐号,让安装程序自动建立这个帐号。
自动创建帐号
创建帐号完毕后,就是要配置数据库的监听端口、连接许可,及本地区域和超级用户的设置了。我选择的是“中华人民共和国”,选择编码类型为UTF-8,(注意:图上为SQL_ASCII务必改之)这儿建立的超级帐号是数据库管理员用户,注意与前面的服务帐号区别。注意这个对话框只有你在上一步选择了让PostgreSQL作为一个系统服务运行才会出现。
初始化数据库设置
点击下一步后,会弹出一个远程连接的选项,提示本地连接数据库默认都可以被接受,但是如果想让远程计算机也能连接到数据库的话,你需要在安装完成后,单独设置pg_hba.conf文件,具体设置我们在后面再说明。
选择在默认创建的测试数据库template1中激活的过程语言,我这儿只选择了pgsql了。注意这个对话框只有你在选择了让PostgreSQL作为一个系统服务运行,并且选择了初始化数据库组件后才会出现。
选择过程语言
选择在测试数据库template1中激活的模块,所有的扩展文件都是会被安装上,这一步只是选择在你所有的数据库中默认激活哪些模块。这些扩展模块能提供一些增强的功能。(基本上默认就行了)
选择加载扩展模块
至此安装配置参数就已经配完了,你只需要点下一步等待安装完成就可以了,PostgreSQL安装速度很快,根据机器不同时间略有不同。最后出现安装成功界面。
客户端连接设置
PostgreSQL出于安全考虑,默认是拒绝所有远程客户端的连接的,如果你要想远程登录服务器端的话,需要设置pg_hba.conf,从开始菜单–>程序–>PostgreSQL–>configuration files中选择编辑pg_hba.conf。
编辑pg_hba.conf
修改为如下内容:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.1.113/32 md5
这样表示本机和192.168.1.113这台机器可以通过经过MD5加密的密码连接数据库。通过修改IP地址的掩码,也可以允许哪一个段的地址可以连接服务器。另外,认证方式MD5还可以改为trust,表示完全信任这个地址的连接(这一点在调试程序时比较方便)。改为password,表示通过密码连接,但是密码以明文方式发送。设置完后,需要重新启动PostgreSQL才能生效。
五、空间数据库实现
正在研究这部分内容,希望能尽快完成空间数据库设计和实现,到时候再总结。
5.1 Shapfile简介
本系统的Shapfile(简称SHP)文件由河北省测绘局提供。
Shapfile文件为ESRI公司的文件存储格式,并且得到了业界广泛的支持。Shapfile格式是一种简单的,用非拓朴关系的形式存储几何位置和地理特征的属性信息的格式。虽然GeoServer采用Shapfile文件可以快速的创建网上地图服务,但它的缺点确很明显:
1、Shapefile只支持一个图层,在实际中没有意义。
2、直接保用SHP文件不安全,Shapfile文件很容易被病毒或其他原因误删除。
3、GeoServer中用Shapfile文件作数据源的效率是很低的。
4、Shapfile中的汉字GeoServer不能解析,会出现乱码。
5、数据库可以方便的对地理信息进行查询。
5.2 用PostGIS管理空间数据
PostGIS支持GIST空间索引(附录1)、规范窗体,能很大的提高处理效率。
OGC格式只提供二维的几何体,且相关联的SRID从未深入的用于输入输出请求,PostGIS支持OpenGIS组织"Simple Features for SQL"规范指定的所有GIS对象和函数,并进行了扩展,格式是EWKB、EWKT,其中增加了对3DZ,3DM和4D 坐标系的支持(当然三维、四维数据的OGC标准还未完全制定),深入引进了SRID信息。
空间数据表结构:PostGIS中存在两个必需的元数据表格, SPATIAL_REF_SYS(空间参考表格) 和 GEOMETRY_COLUMNS(几何体属性列),两个表用于存储空间数据库使用的坐标系统数字ID和文本描述。
PostGIS的shp2pgsql命令可以将Shapfile直接导入到数据库中也可以导出为SQL文件,推荐先导出为SQL文件再将此文件在SQL运行窗口中执行可将数据导入数据库。代码如下:
Shapfile到SQL语句:
shp2pgsql 路径\shp数据文件名 新建的数据表名 > 路径\SQL文件名.sql
Shapfile直接入库:
shp2pgsql -c 路径\shp数据文件名 新建的数据表名 数据库名|psql -d 数据库名
举例说明:
如将一Shapfile文件“c:\road.shp”导入到数据表“road”中,数据库为“sjzmap”。
1、运行“命令提示符”。
2、切换至PostgreSQL数据库安装目录中的bin目录下。
3、执行此目录下的shp2pgsql命令:“shp2pgsql c:\road.shp road > c:\road.sql”。
4、如将此文件直接导入数据库(不推荐):“shp2pgsql -c c:\road.shp road sjzmap | psql -d sjzmap”。
六、用uDig可视化生成SLD
登录http://udig.refractions.net,下载安装最新版的uDig(User-friendly Desktop Internet GIS):用户友好桌面因特网GIS。
uDig是基于EclipseRCP和GeoTools开发的,支持OpenGIS组织发布的公共标准,尤其支持WMS、WFS标准。它既是一个应用程序,也可以作为开发新的桌面因特网GIS应用程序的核心平台,我们用uDig只是为了方便的对地图进行可视化的配色,方便编辑SLD样式文件。下面以配置PostGIS中的“base_road”图层为例进行说明。
打开uDig新建一个工程“test_map”
新建工程“test_map”
从“菜单->Layer->Add…”中,按照向导添加PostGIS图层“base_road”,添加成功后如下图:
添加“base_road”图层后的uDig
uDig会为图层生成随机的样式,下面我们将更改默认的样式。从左下角的“Layers”框中选中“base_road”图层,点击按钮或者选择“Layer->Change Style…”会弹出“Style. Editor”对话框。左侧的Simple中可以调教图层的各种配色,点击XML可以查看生成的SLD文件,挑选合适的配色后点击Export就可将此SLD文件导出。导出的SLD文件可以在GeoServer中直接使用,但是这时的样式与图层数据表的名称是相关联的,通用性较差。为了获得最好的通用性,请将此文件参照GeoServer样例的SLD文件手工进行代码优化后再导入GeoServer。
注意:SLD文件中有汉字时不可存为UTF-8编码必须存为GBK/GB2312编码,因为GeoServer导入有汉字的UTF-8编码的SLD样式文件时会报错。
对应当前样式的SLD文件
七、基于GeoServer的WebGIS的实现(我选择的是MapServer,基于C的)
登录http://www.geoserver.org,下载最新版的GeoServer。
安装:有两种方式安装,一种是使用它的安装程序(.exe 文件),这种方式安装的GeoServer自带web服务器,可以独立运行(需要JDK环境),默认端口是8080;另一种安装方法是使用Tomcat (或其它web服务器,具体可以从GeoServer官方网站上查看web服务器的支持列表),将geoserver.war文件放置在webapps目 录下即可。
7.1 系统总体结构
GeoServer是完全基于JAVA的,WebGIS服务(WMS、WFS)可通过Servlet实现访问,地址是:/GeoServer/wms 、/GeoServer/wfs。访问规则见前节(WebGIS相关的OpenGIS规范)。
整体结构如下:
GeoServer结构:
下面是GeoServer实现的网上地图服务以及相关操作:
WFS UML 图表 (选自GeoServer参考文档)
WMS UML 图表 (选自GeoServer参考文档)
以上可以看出,GeoServer完全实现了OGC相关规范。
7.2 GeoServer服务器端概览
要提供WebGIS 服务首先须配置GeoServer,GeoServer提供Web界面进行管理,进入:http://host:port/geoserver,点击“登 录”进入登录界面,默认用户和密码分别是admin、geoserver。点击“配置”进入配置界面,有五个栏目可以配置:
7.2.1、服务器:
可以设置服务器信息和联系信息,前者包括:最大地理要素数限制、是否显示 详细异常信息、数字精度(几位小数)、语言编码(为支持多国化,可设置为UTF-8)、日志相关等,后者包括单位名称、地址、联系方式等。
7.2.2、WCS:
WCS的相关信息,可以查看安装的Coverage插件列表。
7.2.3、WFS:
可以设置WFS相关信息,包括:是否启用WFS服务、服务层次(基本服务、事务处理层次、完全服务)、以及WFS服务器描述信息和Test Suites 的使用。
7.2.4、WMS:
设置内容包括:是否启用WMS服务,描述信息,SVG图形表现形式(简单描绘还是蜡染色法表现、是否采用抗锯齿处理)
7.2.5、数据:
数据配置的内容较多也是我们主要用到的,分六部分:名称空间、Coverage库、数据库、样式、地图要素类型(FeatureTypes)、Coverages,具体的数据配置会在下面的7.3节进行实例说明。
7.3 GeoServer配置
Shapefile 导入到PostgreSQL数据库,再为其编写好样式后就可以在GeoServer中配置了。地图图层的所有配置都是在“配置->数据”中,这里分为六个 部分,其中“Coverage库”和“Coverages”为删格数据的配置,以下实例说明中不会涉及。
下面以配置图层“base_road”为例进行说明:
1、新建一个名称空间,并设置前缀为“sjz”,其URI为http://www.hbsanctum.com/sjz,并设为默认的名称空间,提交并保存。(注意:界面左上角有“应用”、“保存”和“载入”三个按钮,提交后必须先点“应用”成功后再点“保存”,以下各步骤的操作均按此执行。)
2、在“数据库”中创建一个新的Feature数据集,“Feature数据描述”中选择“Postgis”,“Feature数据集 ID”同样命名为“sjz”,点击“新建”按钮后转到Feature数据集编辑器中,在此编辑器中正确添写PostgreSQL的连接信息后提交数据。
3、新建地图样式,GeoServer支持SLD来修饰地图,这里将自定义一个base_road.sld文件,上传并注册到GeoServer,样式名设为base_road。
4、设置好了数据源和地图样式,接下来要完成最后的工作,新建一个FeatureType 选择数据源为:sjz:::base_road,地图样式选择base_road,SRS设置为:4326,点击“生成”,GeoServer将自动填写地图范围和相关信息。此外还可以设置标题、关键词、Schema基础、摘要……提交并保存。
GeoServer1.5采用了OpenLayers来显示图层,现在我们可以从“欢迎->样例->地图预览”查看刚才配置的图层了。
八、用OpenLayers实现WebGIS客户端
8.1 OpenLayers简介
登录http://www.openlayers.org,下载OpenLayers的压缩包。
OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers实现访问地理空间数据的方法都符合行业标准。比如OpenGIS的WMS和WFS规范。OpenLayers采用面向对象方式开发,并使用来自Prototype.js和Rico中的一些组件。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一方面OpenLayers提供了非常多的选择。
从OpenLayers2.2版本以后,OpenLayers已经将所用到的Prototype.js组件整合到了自身当中,并不断在Prototype.js的基础上完善面向对象的开发,Rico用到地方不多,只是在OpenLayers.Popup.AnchoredBubble类中圆角化DIV。OpenLayers2.4版本以后提供了矢量画图功能,方便动态地展现“点、线和面”这样的地理数据。
8.2 实例说明
以创建一个index.html作为查看地图的页面为例。导入OpenLayers.js和你将要创建的js。内容需要一个div,我们给它的id起名叫做area。你有必要在写一些CSS限定#area的宽度和高度,如果乐意,加上一个border也是很不错的选择。
我们首先要创建一个OpenLayer.Map对象的实例:
var map = new OpenLayers.Map("area");
其中的参数可以传id,也可以传ElementObject,当然id更加方便一些。
接下来就是向地图中添加图层,通常情况下使用OpenLayers.Layer的子类来完成图层的初始化。
OpenLayers提供了一下Layers的扩展:
OpenLayers.Layer.Image
OpenLayers.Layer.HTTPRequest
OpenLayers.Layer.Grid
OpenLayers.Layer.WMS
OpenLayers.Layer.KaMap
OpenLayers.Layer.EventPane
OpenLayers.Layer.Google
OpenLayers.Layer.VirtualEarth
OpenLayers.Layer.Markers
OpenLayers.Layer.Text
OpenLayers.Layer.GeoRSS
OpenLayers.Layer.Boxes
OpenLayers.Layer.TMS
Image类封装一个实际图象作为图曾内容
HTTPRequest类可以接收一个动态生成的图片,你可以通过HTTPRequest类的参数向服务器发送参数
Grid类是HTTPRequest类的子类,提供更加详细的方法
WMS类用于连接WMS服务器以获得图象
KaMap类用于连接MapServer
EventPane类作为用于接收用户操作的图层
Google类用于从Google获得图象,它仍然需要你从Google获得API KEY,并且include
VirtualEarth类用于操作VirtualEarth的图层
Markers类用于生成接收和显示用户本地标记的图层
Text类用于接收CSV文件
GeoRSS类是Marker类的子类,用于封装接收GeoRSS并在图层中作出marker
Boxes同样也是Marker类的子类,可以用div来做marker,而非image
TMS用于接收TMS服务器的地图
创建完图层后,可以用Map的addLayer(layer)方法插入,并执行Map的zoomToMaxExtent()方法让地图合适地显示。
OpenLayers还提供了丰富的Control类为地图浏览添加一些工具,继承自OpenLayers.Control类
OpenLayers.Control.LayerSwitcher
OpenLayers.Control.MouseDefaults
OpenLayers.Control.MousePosition
OpenLayers.Control.MouseToolbar
OpenLayers.Control.OverviewMap
OpenLayers.Control.PanZoom
OpenLayers.Control.PanZoomBar
OpenLayers.Control.Permalink
OpenLayers.Control.Scale
这些类的实例会在地图浏览的“窗口”上增加一些工具栏或是“按钮”,增加互动性和功能性。
OpenLayers对常用的数据结构进行了封装
OpenLayers.LonLat
OpenLayers.Size
OpenLayers.Pixel
OpenLayers.Bounds
以便于操作。
此外OpenLayers.Util类可以对图片载入错误时图片框的颜色和图片框中默认的图片进行自定义,这一点是非常方便的。OpenLayers的Ajax类对创建XMLHttpRequest对象的过程进行了封装,可以使用它进行简单的Ajax操作。
九、附录
1. 相关概念
GIST
http://man.chinaunix.net/database/postgresql_8.0_CN/gist.html
GiST 的意思是通用的搜索树(Generalized Search Tree)。 它是一种平衡的,树状结构的访问方法,在系统中起一个基础的模版,然后可以 使用它实现任意索引模式。B+-trees,R-trees 和许多其它的索引模式都可以用 GiST 实现。
GiST 的一个优点是它允许一种客户化的数据类型和合适的 访问方法一起开发,并且是由该数据类型范畴里的专家,而不是数据库专家开发。
有些信息是从 加州大学伯克力分校的 GiST 项目网站 和 Marcel Kornacker 的论文,Access Methods for Next-Generation Database Systems 中派生的。
PostgreSQL 里的 GiST 实现目前主要是 Teodor Sigae 和 Oleg Bartunov 维护的, 在他们的网站上有更多信息:http://www.sai.msu.su/~megera/postgres/gist/。
R-TREE
R-tree 索引用于索引空间数据。一个哈希索引无法处理范围搜索。而 B-tree 索引只能处理一维的范围搜索。R-tree 索引可以处理多维数据。例如,如果可以在一个类型为 point 的字段上建立一个 R-tree 索引,那么系统在回答类似 select all points within a bounding rectangle (选择在一个长方形范围内的所有点)这样的查询时有更高的效率。
建立 R-Trees 可以处理多边形和方形。理论上说,R-trees 可以扩展为处理更多维数。不过在实践上,扩展R-trees 需要一定的工作量。
WKB
Well Known Binary 一种GIS数据的二进制存储方式。
WKT
Well Known Text
reprojection
重投影
SPATIAL_REF_SYS Table
空间参考系统表格(SPATIAL_REF_SYS)用来储存空间参考系统资讯,表格结构如下:其中SRID为空间参考系统代码,AUTH_NAME为空间参考系统之坐标名称,AUTH_SRID为空间参考系统之坐标名称代码,SRTEXT为空间参考系统之WKT(Well-known Text)文字方式格式。空间参考系统之WKT资料结构包括空间。
coordinates
坐标系
features
几何元素
SRID
spatial referencing system identifier空间参考系统标示符。
populates
填充
schema
大纲
meta-data
元数据
2. 相关网站和讨论组
OGC官方网站:http://www.opengis.org
PostgreSQL官方网站:http://www.postgresql.org
uDig官方网站:http://udig.refractions.net
GeoServer官方网站:http://www.geoserver.org
OpenLayers官方网站:http://www.openlayers.org
GeoTools官方网站:http://www.geotools.org
GeoServer q群:4825849
相关推荐
《基于ASP的电子地图系统设计与实现》 在信息技术飞速发展的今天,电子地图系统已经成为了日常生活、工作和研究中的重要工具。本文将深入探讨基于ASP(Active Server Pages)技术的电子地图系统的构建过程,旨在...
GeoServer 是一个开源的、基于Java的Web服务软件,它实现了OGC(开放地理空间联盟)的标准,如WMS(Web Map Service)、WFS(Web Feature Service)等,用于发布地图和地理空间数据。"geoserver-2.15.x-latest-bin....
GeoServer 是一款开源服务器软件,它支持多种地理空间数据格式并可提供基于Web的地图服务。GeoServer 能够与众多地理信息系统(GIS)工具和客户端无缝集成,如QGIS、MapInfo、Google Earth等。通过GeoServer,用户可以...
基于开源软件构建的旅游交通电子地图平台,可以降低开发成本,提高开发效率和系统的可维护性。 知识点四:系统架构设计 旅游交通电子地图平台的系统架构设计采用B/S模式三层架构,由客户端、服务器端和数据库组成...
【基于开源WebGIS的城市旅游交通电子地图开发研究】 随着信息技术的快速发展,旅游业也逐渐步入了数字化时代。传统的纸质旅游交通地图已经被互联网上的电子地图所取代,为游客提供了更便捷、实时的信息获取方式。...
【长沙理工大学 - 基于开源 WebGIS 的城市旅游交通电子地图开发研究】 随着全球旅游业的迅速发展和计算机技术的进步,旅游者获取信息的方式发生了显著变化,从传统的纸质地图转向了互联网上的电子地图。开源软件的...
《北京2013电子地图:数据解析与Geoserver应用》 电子地图作为一种现代信息技术的产物,已经广泛应用于城市规划、交通管理、旅游导航等多个领域。本篇将重点介绍“北京2013电子地图”这一数据集,并探讨如何在...
电子地图是一种基于数字技术的地理信息系统,它将地图信息以数字化的形式存储,通过计算机进行处理、分析和展示。在“电子地图(01)”这个项目中,我们关注的是一个未完成的电子地图管理系统,其核心功能是解析地图...
Java电子地图是一个基于Java编程语言实现的地理信息系统(GIS)应用程序,它允许用户在数字平台上查看、分析和操作地理数据。这个开发模块大全涵盖了多个关键组件和功能,为开发者提供了全面的工具集来构建功能丰富...
在“地理信息系统嵌入式开发ehotgis电子地图.rar”这个压缩包中,我们可以看到一系列与GIS开发相关的资源,特别是涉及到一个名为“ehotgis”的电子地图系统。 “ehotgis”可能是一个开源或商业的GIS平台,专为...
Flex电子地图是一个基于Adobe Flex技术实现的交互式地图应用程序。Flex是Adobe开发的一款用于构建富互联网应用程序(RIA)的开源框架,它允许开发者使用ActionScript编程语言和MXML标记语言来创建动态、交互性强的...
Java电子地图项目是一种基于Web技术实现的地理信息系统(GIS)应用。它允许用户在Web浏览器中查看、操作和分析地理数据。在这个项目中,MyEclipse作为开发环境,提供了集成的开发工具支持,使得开发过程更为高效和...
【基于矢量瓦片技术的Web电子海图优化方法】主要探讨了如何利用现代GIS技术和互联网技术提升Web电子海图的性能和用户体验。传统的Web电子海图基于栅格瓦片技术,虽然能解决跨浏览器显示问题,但在显示速度、渲染效果...
为了实现多光谱影像高效管理与三维可视化功能,提出了基于开源地理信息系统GIS)的多光谱影像三维可视化系统设计及实现方法,利用PostgreSQL和PostGIS构建空间数据库,通过GeoServer发布网络地图服务规范( WMS)与网络...
标题“江苏电子地图市界”和描述中提到的“江苏省 省界 市界 县界 shp文件 包括 各市县名称 面积等基本信息”,涉及的知识点主要集中在地理信息系统(GIS)、数据格式以及地理数据处理上。 首先,GIS是一种用于收集...
3. **项目实例**:"河北三川电子地图系统设计开发与实现.doc"可能是一个具体的GIS项目案例,展示了如何设计和实施一个地方性的电子地图系统,这对于理解GIS在实际工作中的应用非常有帮助。 4. **GIS数据查询与编辑*...
例如,使用开源的GeoServer进行地图切割和GIS展现,利用ArcIMS进行信息更新与远程维护,而数据库则遵循规范化的信息分类标准和统一的地理空间关系构建,确保数据的准确性和系统访问的可控性。 固废管理信息化系统的...
GIS不仅仅是地图的电子化,它涉及到数据采集、存储、分析和可视化等多个环节。在Visual C++中开发GIS系统,你需要熟悉空间数据模型,如矢量数据和栅格数据,以及它们的处理方法。 其次,书中会讲解如何利用Visual ...
5. **Web GIS**:基于Web的地图服务和应用程序,如Web Map Service (WMS) 和Web Feature Service (WFS),使得地理信息可以通过互联网广泛共享。开放地理空间联盟(OGC)的标准在Web GIS中扮演着关键角色。 6. **...