分享

开源GIS

 Albert_E 2022-10-31 发布于四川

1 服务器搭建

http:///下载zip,解压缩,在解压路径下的bin文件夹里双击startup.bat,出现命令簿(不可关闭)。

在浏览器中输入http://localhost:8080,出现下图。这时可以设置GeoServer的管理员账号。账号admin,密码geoserver。

该图即为GeoServer在服务器上的首页。可以在本页进行数据的连接和发布。

2 地理信息数据导入及发布

在本段中,笔者将使用中国2014GDP数据作为例子,进行数据的发布。

对于地理信息数据的导入,需要使用到空间数据库。在本文中,笔者使用的是PostgreSQL+PostGIS完成这一任务。接下来,将详细介绍如何导入数据。

首先去PostgreSQL官方网站下载最新版的软件,推荐9.5及以前的版本:

https://www./

安装的时候需要注意记住数据库访问的账号和密码,为了方便,均可以设置为postgres作为测试。设置端口为默认值5432.

在安装完成后,可以继续安装PostgreSQL的插件管理软件,其中可以选择PostGIS进行安装,也可以前往PostGIS的官方网站进行下载:

http://www./

在安装的过程中,注意勾选安装空间数据库。需要登录PostgreSQL数据库时,使用先前设定的账号密码即可。

安装结束后,打开pgAdmin管理工具,可以对PostgreSQL进行管理。

首先是连接PostgreSQL,接下来可以通过右键(点击数据库)或者使用SQL语句,根据需要,新建一个数据库。

建立完成数据库后,点击该数据库下的架构->public->数据表,使用SQL语句添加空间数据库管理插件PostGIS:

CREATE EXTENSION PostGIS

成功后,刷新,数据表中会出现spatial_ref_sys,说明可以导入空间数据了。

点击pgAdmin上方的插件,选择PostGIS插件,可以导入shp文件。选择Add File,通过路径选择shp文件,再点击import,即可导入文件。

此时数据已经导入了空间数据库,可以进行数据发布的操作了。

打开浏览器,进入GeoServer首页,点击左侧的工作区(Workspaces),再点击添加新的工作区(Add new workspaces)可以创建工作空间。工作空间的作用是在于将不同数据来源的数据保存在一起。在设置URI时,须设置为http://localhost:8080/CHINA,CHINA代表的是工作空间的名字,这样所有与之相关的网页均在这个URI之后。

接下来点击数据存储(Stores),再点击添加新的数据存储(Add new store),可以添加一个新的数据源。从图中我们可以看出,GeoServer支持多种数据类型。在这里我们以PostGIS为例进行服务的发布。

点击PostGIS选项,进入数据源信息的页面。先点击工作区(Workspace)下拉选项,可以选择具体的工作空间,例如本文中选择CHINA。

接下来输入数据源名称,这是标识不同数据的依据,例如本文中输入GDP。

在连接参数中,输入host,若为本机则为localhost,端口5432,再输入数据源在PostgreSQL中的数据库名称,之后输入连接PostgreSQL的账号和密码即可完成数据库的连接。

在最下面点击保存即可。

接下来就要发布具体的图层了。点击图层(Layers),即可进入图层选择界面;再点击添加一个新图层(Add a new resource),即可发布具体的图层。点击后,先选择具体的数据源,会出现该数据源下的各种表,选择需要发布为图层的数据表,点击发布(publish),即可进行发布。

可以根据需要输入图层名称,也可以直接使用默认的图层名称。需要注意的是地图投影的定义:

在这里可以输入地图投影。如果原图没有投影,将不会进行显示,在这里可以点击Find,输入投影的代码(如WGS84为4326)进行查找。接下来在下方的范围中,点击从数据中计算(Compute from data),即可算出范围。

其他的文本框可以不填。保存之后即为图层的发布。

为了查看发布后的效果,可以点击左侧的Layer Preview,找到刚刚发布的内容。GeoServer提供了多种数据格式可以调用。点击OpenLayers可以直接看到使用OpenLayers调用的图层。

在下拉选框中还可以选择WMS和WFS服务等。这些也就构成了服务器端的数据。

3 使用OpenLayers作为前端

笔者使用OpenLayers进行前端的编写。目前最新的版本是OpenLayers3,可以前往GitHub下载代码:

https://github.com/openlayers/openlayers

其中包含了css文件和js文件,在写前端时需要包含在网页中:

<link rel="stylesheet" type="text/css" href="CSS/ol.css" />

<script type="text/javascript" src="Scripts/ol.js"></script>

其API文档在官方网站上有:

http:///en/latest/apidoc/

也可以参考官方给出的案例进行学习:

http:///en/latest/examples/

此外,为了完成能够完成前后端的交互,还应下载jQuery。

http:///download/

之后也应将其添加在网页中。

OpenLayers的核心部件为Map (ol.map),相当于地图的容器。整个地图的数据就是通过该部件进行显示。

Map中包含了Layer图层控件和View视图控件,分别是对于图层数据的操控和对于用户视图的操控。Layer (ol.layer)控制数据的可视化显示,支持Tile (瓦片地图)、Image (影像数据)、Vector (矢量数据)的显示;而View (ol.view)控制地图的中心点、放大、投影等设置。

添加一个地图并进行显示的js代码如下:

 

  1. 1 <div id="map">
  2. 2 <script>
  3. 3 var format = 'image/png';
  4. 4 var bounds = [73.441277, 18.159829,
  5. 5 135.08693, 53.561771];//范围
  6. 6
  7. 7 //中国各省底图(面)
  8. 8 var ImageMap = new ol.layer.Image({
  9. 9 source: new ol.source.ImageWMS({
  10. 10 ratio: 1,
  11. 11 //自己的服务url
  12. 12 url: 'http://localhost:8080/geoserver/CHINA/wms',
  13. 13 //设置服务参数
  14. 14 params: {
  15. 15 'FORMAT': format,
  16. 16 'VERSION': '1.1.0',
  17. 17 STYLES: '',
  18. 18 //图层信息
  19. 19 LAYERS: 'CHINA:china_2014gdp',
  20. 20 }
  21. 21 })
  22. 22 });
  23. 23
  24. 24 //设置地图投影
  25. 25 var projection = new ol.proj.Projection({
  26. 26 code: 'EPSG:4326',//投影编码
  27. 27 units: 'degrees',
  28. 28 axisOrientation: 'neu'
  29. 29 });
  30. 30
  31. 31 //设置地图
  32. 32 var map = new ol.Map({
  33. 33 //地图中的比例尺等控制要素
  34. 34 controls: ol.control.defaults({
  35. 35 attribution: false
  36. 36 }).extend([
  37. 37 new ol.control.ScaleLine()
  38. 38 ]),
  39. 39 //设置显示的容器
  40. 40 target: 'map',
  41. 41 //设置图层
  42. 42 layers: [
  43. 43 //添加图层
  44. 44 ImageMap
  45. 45 ],
  46. 46 //设置视图
  47. 47 view: new ol.View({
  48. 48 //设置投影
  49. 49 projection: projection
  50. 50 })
  51. 51 });
  52. 52
  53. 53 //地图显示
  54. 54 map.getView().fit(bounds, map.getSize());
  55. 55 </script>
  56. 56 </div>

复制代码

首先需要定义一个图层,而这个图层调用的是由GeoServer发布的WMS服务,其数据源是服务的url,可以通过进入服务器,找到相应服务,点击相应的WMS服务获取其url。

接下来需要设置显示的格式,这里设置了地图投影为WGS84,即代号4326.

之后创建了地图容器map,将图层添加进去,并设置了投影。

接下来分别设置了地图初始的显示范围,最后调用getView().fit函数,显示地图。

 

具体代码和数据可以参考github:https://github.com/kkyyhh96/WebGIS

参考:天靖居士:http://www.cnblogs.com/kkyyhh96/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多