进行GIS项目开发中,常使用Geoserver作为开源的地图服务器,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。
安装
源码下载
linux的在这
geoserver用户指导手册
安装使用参考
现在我们使用2.16.2版本
Geoserver是一个JavaEE项目,常通过Tomcat进行部署、启动
首页:http://localhost:8080/geoserver/web/
初始用户名为"admin",密码为"geoserver"
随着鼠标的拖动,openlayers插件不断请求调用地图服务接口,可以注意到只有BBOX参数在不断改变:
http://localhost:8080/geoserver/topp/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=topp%3Atasmania_state_boundaries&exceptions=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&STYLES=&WIDTH=768&HEIGHT=673&BBOX=139.5703125%2C-50.262451171875%2C156.4453125%2C-35.474853515625
安装运行可能遇到的问题
出现 org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
的报错,tomcat版本低的问题,我换apache-tomcat-9.0.34就好了。
发布矢量数据wms(Web地图服务)
参考1
总结为以下步骤:
1.本地创建数据文件夹D:Javaapache-tomcat-9.0.0.M10webappsgeoserverdatashape1,拷贝矢量数据(.shp、.shx、.dbf、.prj)到文件夹内;
2.页面上新建工作区
,通常,会为每个项目创建一个工作空间。设置name如test1、命名空间如http://localhost/test1, 命名空间URI文件不需要解析为实际有效的网址。
3.添加新的数据存储
,包括选择数据源、数据源名称、工作区、文件目录
4.发布图层(一个shp文件对应一个Layer)。正式发布前需要编辑发布信息,包括配置发布信息,有些数据是自动填充的,有的可以自动计算(设置不适合会影响可见性):
5.在layer preview中通过地图客户端openlayers查看地图。
6.图层组相关设置参考(非必需)
边界设置:
可能遇到的问题
添加图层时,数据名字如果含中文,显示出来会被url编码:
不影响发布,但在发布编辑命名图层时还是用英文命名:
不然对后面gwc缓存服务有影响,数据访问也不便。
图层图标的含义
http请求参数
http://localhost:8080/geoserver/test1_1/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=test1_1%3A%E6%88%91%E6%98%AF%E6%B0%B4%E7%B3%BB&exceptions=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&STYLES=&WIDTH=768&HEIGHT=499&BBOX=129.3914794921875%2C42.62214660644531%2C130.4461669921875%2C43.30741882324219
BBOX参数
决定了图片位置,它由最小x,最小y,最大x,最大y
四个参数组成,由逗号隔开,url编码后显示为%2c
,四个值可以是经纬度值,也可以是投影坐标的边界(单位是米)。
width=768&height=499
是图框的宽、高,决定图幅。
LAYERS参数
即图层的name,由工作空间名:图层的命名组成。
通过wms也可获取要素属性信息参数
点击获取要素属性信息,返回的是一个html:
http://localhost:8080/geoserver/test1_1/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=test1_1%3Aother_road1&LAYERS=test1_1%3Aother_road1&exceptions=application%2Fvnd.ogc.se_inimage&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=50&X=50&Y=50&SRS=EPSG%3A4326&STYLES=&WIDTH=101&HEIGHT=101&BBOX=129.75831985473633%2C42.89663314819336%2C129.79299545288086%2C42.93130874633789
发布矢量数据wfs(Web要素服务)
一个图层的WFS服务查看方法是在Layer Preview页面,选择WFS下的GeoJSON(以JSON数据形式展现要素信息,方便解析),查看该图层的要素信息:
谷歌浏览器有不兼容问题,在ie中选择GeoJSON,即可以json形式返回该图层所有要素的要素属性数据。
这里使用了getFeature操作,用来检索要素信息http://localhost:8080/geoserver/test1_1/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=test1_1%3A%E6%88%91%E6%98%AF%E6%B0%B4%E7%B3%BB&maxFeatures=50&outputFormat=json
除了查询,wfs支持对地理要素的插入,更新,删除和发现服务,专注于要素的地理信息,简化了返回信息。
注意:栅格数据如瓦片,没有wfs提供。
数据输出格式
发布arcgis瓦片服务
目前没有对于ArcGIS切片发布的支持,需要借助GeoWebCache,在geoserver1.7版本之后,geoserver都集成了GeoWebCache这个插件模块。
与gwc结合使用手册
拓展配置
独立版的GeoWebCache除了对WMS服务地图建立缓存外,还有对于ArcGIS切片发布的支持,但GeoWebCache插件版需要额外拓展配置下。
总结为以下几点:
1、下载独立版的geowebcache1.16版(与geoserver的gws插件版本一致),将里面的依赖gwc-arcgiscache-1.16.1.jar拷到geoserver的lib中;
2、修改geoserver的lib中的gs-gwc-2.16.2.jar(直接下jar https://mvnrepository.com/artifact/org.geowebcache/gwc-arcgiscache/1.16.2 下不了)。
1)拷贝 geowebcache/WEB-INF/geowebcache-arcgiscache-context.xml到gs-gwc-2.16.2.jar里;
2)修改gs-gwc-2.16.2.jar中的geowebcache-servlet.xml 文件,添加 <import resource="geowebcache-arcgiscache-context.xml"/>
;
3)修改gs-gwc-2.16.2.jar中的geowebcache-core-context.xml 文件,添加 <bean id="gwcArcGISGridsetConfiguration" class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration" />
。
配置arcgis瓦片数据
点击caching defaults
进入Go to the embedded GeoWebCache home page
,可以看到geowebcache.xml文件位置,再进入A list of all the layers and automatic demos
,即是gwc的demo主页。
在geowebcache.xml的layers节点中添加数据位置信息:
<arcgisLayer>
<name>tmwp_ArcGISServer</name
<tilingScheme>D:gisdataGEOWEBCACHE mwp_ArcGISServerconf.xml</tilingScheme>
<tileCachePath>D:gisdataGEOWEBCACHE mwp_ArcGISServer\_alllayers</tileCachePath>
<hexZoom>false</hexZoom>
</arcgisLayer>
在点击gwc的demo主页下方Reload TileLayerConfiguration
。
在demo列表找到tmwp_ArcGISServer
,点击png
即可查看瓦片地图。
使用geowebcache的缓存功能
通过geoserver/gwc/service/wms访问,会开启缓存服务,并存储在配置的$GEOWEBCACHE_CACHE_DIR文件中。在gwc主页可以找到路径:
Storage Locations
Config file: gwc/geowebcache.xml
Local Storage: C:UsersADMINI~1AppDataLocalTempgeowebcache
修改$GEOWEBCACHE_CACHE_DIR文件的方法有两种 :改web.xml 或改geowebcache-core-context.xml。
修改后,重新启动gs可识别:
目录中会生成geowebcache.xml配置文件,在该配置文件中配置arcgis瓦图。
也可以主动去生成切片参考4.4,这里也有linux版的安装教程,在tile layers
中选择要切的图层,选择剪裁策略(EPSG:900913就是(EPSG:3857)) 和格式,点击seed/truncate
进入页面,提交剪裁任务:
生成的瓦片图也存放在$GEOWEBCACHE_CACHE_DIR文件中。
可能出现的问题
1、因标识不识别导致运行不起来
应该是xml文件配置的问题。
2、jar包冲突问题
如java.lang.NoSuchMethodError
,
在使用gwc-arcgiscache-1.10.5.jar、gwc-arcgiscache-1.15.2.jar时出现,还是需要16版本。
3.服务成功发布但查看地图http://localhost:8090/geowebcache/demo/tmwp_ArcGISServer?gridSet=EPSG:3857_tmwp_ArcGISServer&format=image/png 显示400,日志报错:
还是瓦图文件的问题,参考这里,修改瓦图文件即可。
4.跨域问题解决