前面两节介绍了GeoServer的环境搭建和GeoServer的Web管理界面,这一节我们来熟悉使用GeoServer发布一份Shapefile地图数据。希望通过这一节的学习,我们能够掌握和理解在GeoServer上部署地图数据的一般过程和方法。
在GeoServer上部署地图数据非常简单,GeoServer支持的数据格式和数据源也很多,发布和部署地图数据涉及到GeoServer的几个重要知识点:工作区、数据存储和图层等概念。我们也会在这一节一一进行阐述。这一节我们部署发布的地图数据为Shapefile,也相信大家能够举一反三,学习这一节后能掌握其他数据源的地图数据的部署和发布。
1、下载 nyc_roads.zip ,这是GeoServer官方网站提供的一份Shapefile测试数据,包含了部分纽约的道路信息,我们本次就使用此Shapefile来进行部署和发布。
2、解压下载好的压缩包,然后将整个文件夹复制到GeoServer数据目录的data文件夹下。
GeoServer的数据目录是文件系统中的一个目录,这里存放的是GeoServer的配置信息等。这些配置信息定义了包括GeoServer提供哪些数据服务,这些数据存放在哪里以及像类似WFS和WMS等服务是如何相互影响和提供服务的。数据目录也同样包含了GeoServer所需的众多用于各种目的的支持文件。
如果用户没有对GeoServer的文件系统进行更改的话,那复制完成后的文件目录应该是:geoserver/data_dir/data/nyc_roads,然后就是四个所需的Shapefile格式文件。
部署地图数据第一个步骤即为新建一个工作区,工作区(WorkSpace)是一个用于组织类似图层数据的容器。我们常常会把一些相关的图层数据放到一个工作区里。新建工作区的操作流程为:
登录GeoServer的Web管理界面,依次点击右侧的工作区–添加新的工作区,进入新建工作区的界面,在这里需要输入工作区的名字和命名空间URL。
工作区名字就是一个标志符,用来区分你的不同的项目,而命名空间URL(Uniform Resource Identifier)通常是一个与你项目有关的超链接,如果你的服务器接入了互联网,做好了相关配置与发布,那么可以在互联网上通过这个URL来访问你的数据。
最后点击提交完成创建。
为了添加nyc_roads中的Shapefile地图数据,你必须建立一个数据存储。数据存储实际上维护着地图数据和文件系统中的文件夹的映射关系。
点击数据存储–添加新的数据存储,我们可以看到GeoServer支持的众多矢量数据和栅格数据源:
根据我们要发布的Shapefile地图数据格式,我们点选Shapefile - ESRI(tm) Shapefiles (*.shp)即可。然后按照图中所示填写好相关信息。我们要注意的是工作区应该选择我们第一步建立的,Shapefile文件的位置通过浏览选择我们在准备工作中复制到数据目录下data文件夹中的Shapefile。然后数据表的字符集应该和源数据一致,如果不知道源数据的字符集,建议选择UTF-8,保证对中文系统和用户的支持。
最后点击保存完成创建。
新建数据存储后,默认会停留在新建图层的界面,我们直接在此开始建立图层。因为只有一个图层nyc_roads,点击发布进入图层编辑界面。图层编辑界面定义了图层的数据和发布参数。填入了名称、标题、摘要等基本信息后,我们需要定义重要的SRS信息和边框信息。
本机SRS是指地图数据本身的坐标参考系统,这是由地图数据本身的属性决定的,也是不可修改的。GeoServer会自动从数据文件中读取这一信息。相对应的Native Bounding Box则是根据本机SRS自动计算出来的边框,我们点击从数据中计算就能计算出来边框范围。
定义SRS是指我们自己想要定义显示地图数据的坐标参考系统,我们通过右边的查找按钮进行查找选择。对于国内用户来说,常用的坐标系统可以通过键入“beijing”、”xian”或者4326(WGS-84的编码序号)进行查找选择。选择确定后,通过点击“compute from nativ bounds”可以计算出在这个坐标系统下的边界。
最后点击保存进行发布。
为了验证我们部署发布Shapefile地图数据成功与否,可以对刚刚发布的数据进行预览,点击左侧的Layer Preview,找到我们刚刚发布的地图图层,点击”Openlayers“进行预览,如果成功你可以看到下图所示的道路分布。
在这里,我们已经可以通过默认的控制条来进行放大缩小与平移,还能点击图中的地理要素来查看属性。
至此,通过GeoServer部署发布Shapefile地图数据已经介绍完毕。希望能使大家对工作区、数据存储和图层等概念有更深一步的了解,也能掌握部署发布地图数据的一般方法和流程。
下一节开始和大家详细介绍GeoServer支持的请求协议,如WFS、WMS等。