Geoserver是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。
Geoserver是一个功能齐全,遵循OGC开放标准的开源WFS和WMS服务器。利用Geoserver可以把数据作为maps/images来发布(利用WMS来实现)也可以直接发布实际的数据(利用WFS来实现),同时也提供了修改,删除和新增的功能(利用WFS)。
GeoServer, 顾名思义,是一个Server. 它是开源的,允许用户查看和编辑地理数据。这是地理信息系统(GIS) 领域。GeoServer 是符合OGC 规范的一个全功能的WFS 和WMS server。
GeoServer能够发布的数据类型:
①地图或影象——WMS;
②实时数据——WFS;
③用户更新、删除和编辑的数据——WFS。
1、官网下载geoserver安装包,需要下载tomcat作为容器,tomcat中解压即可使用。
下载地址 ,注意:下载的Tomcat的位数要和Java环境位数一致,例如JDK安装的是64位的,那tomcat也应该选择下载部署64位的。
下载后,解压到一个Tomcat 安装目录中的webapps文件夹下,如D:\software\Tomcat\apache-tomcat-8.5.35\webapps
只需解压,无需安装;可双击执行如下目录bin下的startup.bat文件。
由于tomcat从7.0.41版本开始就支持跨域了,只需要进行下面的简单配置:
● 找到geoserver的web.xml文件,我的电脑对应的路径为D:\software\Tomcat\apache-tomcat-8.5.35\webapps\geoserver\WEB-INF\web.xml;
● 打开该文件,将下面的配置添加至该文件:
<filter>
<filter-name>CorsFilterfilter-name>
<filter-class>org.apache.catalina.filters.CorsFilterfilter-class>
filter>
<filter-mapping>
<filter-name>CorsFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
注意:geoserver默认的管理员账号为:admin/geoserver
2、启动geoserver。
打开tomcat的bin目录,点击startup.bat文件
Web地图服务(Web map service)利用具有地理空间位置信息的数据制作地图,将地图定义为地理数据可视的表现。
这个规范定义了三个操作:
①GetCapabitities返回服务级元数据,它是对服务信息内容和要求参数的一种描述;
② GetMap返回一个地图影像,其地理空间参考和大小参数是明确定义了的;
③GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息。
Web要素服务(WebFeatureService),基础接口是GetCapabilities。
支持对地理要素的插入,更新,删除,检索和发现服务。
该服务根据HTTP客户请求返回GML(Geography Markup Language、地理标识语言)数据。
WFS对应于常见桌面程序中的条件查询功能,WFS通过OGC Filter构造查询条件,支持基于空间几何关系的查询,基于属性域的查询,当然还包括基于空间关系和属性域的共同查询。
Geoservser上使用瓦片地图进行加载,第一次加载后会在服务器端指定文件夹自动生成加载过的地图切片,以后每次加载时会从该文件夹直接读取,大大增加了地图加载的速度。
首先进行Geoserver配置:
1.geoserver运行前,在Geoserver安装目录下的web.xml文件中添加如下参数,设置瓦片存储的位置。不预先设定的话默认存储于系统的tmp目录(windows下为C:\Users<用户名>\AppData\Local\Temp,linux下为/tmp)。如下图所示,地图切片将存储于D:\gwc文件夹下:
2.点击Geoserver主页左侧的Gridsets,然后点击Create a new gridset,填入新建的gridset的名称,坐标系,然后点击Compute from maximum extent of CRS,最下面的Add zoom level用于设定地图的缩放层级,按需要的层级数量加即可,最后点击保存;
3.点击左侧工具栏的Caching Defaults,在最下面Add default gridset下拉菜单选择刚刚建立好的gridset,点击提交;
4.点击左侧工具栏的Tile Layers,可以看到发布的图层列表,在每个元组的右侧的Select One下拉菜单可以选择坐标系(不进行步骤3则看不到刚刚设定gridset时的那个坐标系),点击后就是按该坐标系生成的瓦片地图,可以发现Geoserver还是使用的Openlsyers2。打开在步骤1中设定的存储路径,一边放大缩小地图可以看到在动态的生成地图缓存文件,点开会发现不同放大级数的地图切片。
5.跟普通的加载WMS地图不同的地方就是需要设定TileGrid,TileGrid里面的origin表示瓦片地图开始切片的起始点坐标,resolutions 表示地图的放大层级,这些在上面配置Geoserver的步骤4中打开的瓦片地图页面中查看源代码都能找到。完成这些配置后就是建立一个html页面,把地图添加进去就行了!
<span style="font-family:Microsoft YaHei;">
function init(){
var format = 'image/png';
var bounds = [73.44695998458512,3.6193745040060596,135.07924998249888,53.557498986448266];
var gr = new ol.tilegrid.TileGrid({
origin : [ -180.0,-90.0 ],
resolutions : [ 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 0.010986328125, 0.0054931640625, 0.00274658203125, 0.001373291015625, 6.866455078125E-4, 3.4332275390625E-4, 1.71661376953125E-4, 8.58306884765625E-5, 4.291534423828125E-5, 2.1457672119140625E-5, 1.0728836059570312E-5, 5.364418029785156E-6, 2.682209014892578E-6, 1.341104507446289E-6, 6.705522537231445E-7, 3.3527612686157227E-7 ]
});
var layer1 = [new ol.layer.Tile({
source : new ol.source.TileWMS({
url : 'http://192.168.1.100:7777/geoserver/gwc/service/wms',
params : {
'FORMAT' : format,
'VERSION' : '1.1.1',
'SRS' : 'EPSG:4326',
'tiled' : true,
'LAYERS' : 'China:China',
STYLES : ''
},
tileGrid : gr,
serverType: 'geoserver'
})
})];
var projection = new ol.proj.Projection({
code: 'EPSG:4326',
units: 'm',
axisOrientation: 'neu'
});
var map = new ol.Map({
controls: ol.control.defaults({
attribution: false
}),
target: 'map',
layers: layer1,
view: new ol.View({
projection: projection
})
});
map.getView().fitExtent(bounds, map.getSize());
}
</span>
使用GeoServer发布切片服务之后,在缓存目录查看到文件夹命名以及文件名:
“EPSG_900913_05\3_2\24_17.png”,其中EPSG_900913表示坐标系编码,05表示地图缩放级别,也就是z值;24表示x值;17表示y值;此外,GeoServer切片编号采用标准的tms编号规则,以地图左下角为(0,0)起点。
GeoWebCache本质就是一种切图工具,可以单独下载进行配置使用,但是在geoserver1.7版本之后,geoserver本身集成了GeoWebCache这个模块,这次介绍的GeoServer版本为2.18.0.
在GeoServer安装目录中找到web.xml文件,
打开web.xml文件,添加如下内容,配置切片缓存存放的目录:
<context-param>
<param-name>GEOWEBCACHE_CACHE_DIRparam-name>
<param-value>D:\software\Tomcat\apache-tomcat-8.5.35\webapps\geoserver\data\gwcparam-value>
context-param>
GeoServer启动完成后,访问GeoServer主页,建立工作区;(如果已有工作区,则跳过)
默认的GridSet中只包含了4326和900913坐标系,如果是其他坐标系,则需要新建GridSet。
点击Create a new gridset可以创建新的切图方案,也可以点击现成的切图方案右侧的Create a copy复制一个方案,并在此基础上进行修改。
点击保存之后,在gwc目录下可以看见新增的一个后缀为.bak的配置文件,就是切图方案的配置文件
点击Tile Layers选择需要切图的服务,点击Seed/Truncate可以进入切图设置页面,点击Empty可以清除之前存在的切图缓存。
点击Seed/Truncate,进入如下界面:
Number of tasks to use:该选项表示可以用多少个任务来切图,类似于多线程的模式,如果电脑性能允许的情况下,可以适当增加这个数量,这样切片的速度会更快些;如果电脑性能不高的话,数值太大的话,反而可能会影响性能。
Type of operation:操作类型,包括:Reseed-regenerate all tiles(重新进行完整的切片操作)、Seed-generate missing tiles(只对缺失的部分进行切片)、Truncate-remove tiles(清空切片数据)。
Grid Set:选择切片的Gridset,和图层配置时候设置的Gridset有关。
Format:切片的数据格式。比如image/png
Zoom start:切片的开始层级。
Zoom stop:切片的结束层级,结合Zoom start的选项,就可以将这2层级数据之间的所有层级数据进行切片。
Modifiable Parameters:修饰参数,给切片选择样式等内容。
Bounding box:切片的边界范围,是个可选项。
点击submit按钮之后计算机便开始进行切图,可以通过Refresh list按钮查看当前切图进度和相关状况
每添加完创建数据存储(见七(3)),会出现如下图所示界面,点击发布,会弹出图层发布界面。或者直接左侧图层 新增图层。
需要注意的地方有SRS不能为空,默认会从文件中读出当前shp的采用的坐标系,如果读不出需要手动填写一下,填写最小的范围矩阵,可以充点击下方的“compute from native bounds”自动计算。
另外提示:如果需要在发布layer的同时指定这个layer的默认样式,那么选择tab页到“发布”中重置默认的“default style”
发布完成后,预览。
注意事项
文件按照点线面分类,对应的一个shp文件一个sld符号文件。
新建style样式的时候
上图中的name不必着急填,先上传sld文件,则name会自动填充,如果name和sld中的标签name不一致的话,会导致符号报错。无法正常显示。
在 GeoServer 中,样式是使用SLD(Styled Layer Descriptor)的标记语言完成的。SLD 是一种基于 XML 的标记语言。
SLD 样式文档为GeoServer图层指定单个命名图层和用户样式。样式中可以是一种或多种要素类型样式,每个要素类型样式都包含一个或多个规则,这些规则控制如何根据要素属性和缩放级别应用样式。规则通过使用过滤器来选择适用的特征, 过滤器是包含谓词、表达式 和过滤器函数的逻辑条件。
GeoServer可以提供的矢量数据包括三类形状: 点,线和多边形。
线是最简单的,因为它们只有样式的边缘(指定颜色和粗细)。具有二维形状的多边形具有边和内部(也称为“填充”,可以指定颜色),两者的样式可以不同。点具有可以设置样式的边和填充。
可以通过对颜色,不透明度,对比度和其他参数的多种控制来设置样式。
也可以使用更高级的样式。可以使用众所周知的形状(例如圆形,正方形,星形,甚至自定义图形或文本)来指定点。可以使用破折号样式和哈希样式设置线条。可以使用自定义平铺图形填充多边形。样式可以基于数据中的属性,以便某些特征的样式不同。功能上的文本标签也是可以的。样式还可以通过缩放级别来确定,以便以适合其外观大小的方式显示要素。
SLD 的根元素是
,包含一个图层和样式元素,这些元素描述了如何组合和设置地图样式。
在SLD文档中,一些标记具有前缀,例如ogc。这是因为它们是在XML名称空间中定义的。
StyledLayerDescriptor标记指定两个XML名称空间,一个称为xmlns,另一个称为xmlns:ogc。第一个名称空间是文档的默认名称空间,因此属于它的标记不需要前缀。属于第二个的标记需要前缀ogc。
SLD文档包含一系列层定义,指示要设置样式的层。每个层都是NamedLayer或UserLayer来定义。
或者
可包含以下元素:
①
——要设置样式的图层的名称。(必填)
②
——描述。
③
——要应用于图层的目录样式的名称。(
中为
,提供图层数据的一个或多个要素集合,使用GML指定。)
④
——要应用于图层的样式的定义。
样式元素指定要应用于图层的样式。包含规则和过滤器,以确定要使用特定符号系统设置样式的要素集。规则还可以指定特征样式可见的比例范围。
UserStyle——定义图层的样式,包含以下元素:
①
——样式的名称,用于在外部引用它。
②
——样式的标题。
③
——样式的描述。
④
——该样式是否为命名图层的默认样式。在SLD库模式下使用,值为1或0(默认值)。
⑤
——定义用于呈现单个要素类型的符号。包含一个规则列表,用于确定要应用于图层每个特征的符号。包含有
元素。
通常一个图层只包含一个要素类型,因此通常省略
。可以在样式中指定任意数量的
元素。
Rules——规则将过滤器与任意数量的符号组合在一起。过滤条件计算为true的要素将使用规则中的符号进行渲染。包含以下元素:
①
——指定规则的名称。
②
——指定规则的标题。
③
——指定描述规则的摘要。
④
——指定应用规则时的过滤器。过滤条件是通过使用比较运算符或空间运算符,或者通过逻辑运算符组合的两个或多个运算符来指定的。运算符通常用于将被过滤的特征的属性与其他属性或文字数据进行比较。
——属性值不等于
——属性值为
⑤
——指定适用此规则的比例范围的最小比例分母(含)。如果存在,则该规则适用于给定的比例和所有较小的比例。
⑥
——指定适用此规则的比例范围的最大比例分母(不包括)。如果存在,则规则适用于大于给定比例的比例。
⑦
——将样式设置为点符号
——将样式设置为线符号
——将样式设置为面符号
——指定文本标签的样式
——指定栅格数据的样式
如下为一个完整的sld文件
<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0">
<sld:UserLayer>
<sld:LayerFeatureConstraints>
<sld:FeatureTypeConstraint/>
sld:LayerFeatureConstraints>
<sld:UserStyle>
<sld:Name>dsjsld:Name>
<sld:FeatureTypeStyle>
<sld:Name>group0sld:Name>
<sld:FeatureTypeName>Featuresld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometrysld:SemanticTypeIdentifier>
<sld:SemanticTypeIdentifier>simplesld:SemanticTypeIdentifier>
<sld:Rule>
<sld:Name>default rulesld:Name>
<sld:MaxScaleDenominator>260.0sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:Mark>
<sld:WellKnownName>circlesld:WellKnownName>
<sld:Fill>
<sld:CssParameter name="fill">#FFFFFFsld:CssParameter>
sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke">#FF8080sld:CssParameter>
<sld:CssParameter name="stroke-opacity">0.6sld:CssParameter>
sld:Stroke>
sld:Mark>
<sld:Size>3sld:Size>
sld:Graphic>
sld:PointSymbolizer>
<sld:TextSymbolizer>
<sld:Label>
<ogc:PropertyName>PINYINogc:PropertyName>
sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">Arialsld:CssParameter>
<sld:CssParameter name="font-size">12.0sld:CssParameter>
<sld:CssParameter name="font-style">normalsld:CssParameter>
<sld:CssParameter name="font-weight">normalsld:CssParameter>
sld:Font>
<sld:LabelPlacement>
<sld:PointPlacement>
<sld:AnchorPoint>
<sld:AnchorPointX>0.0sld:AnchorPointX>
<sld:AnchorPointY>0.0sld:AnchorPointY>
sld:AnchorPoint>
<sld:Displacement>
<sld:DisplacementX>0.0sld:DisplacementX>
<sld:DisplacementY>0.0sld:DisplacementY>
sld:Displacement>
sld:PointPlacement>
sld:LabelPlacement>
<sld:Halo>
<sld:Radius>1sld:Radius>
<sld:Fill>
<sld:CssParameter name="fill">#FFFFFFsld:CssParameter>
sld:Fill>
sld:Halo>
<sld:Fill/>
sld:TextSymbolizer>
sld:Rule>
sld:FeatureTypeStyle>
sld:UserStyle>
sld:UserLayer>
sld:StyledLayerDescriptor>
指定符号的形状,
指定填充颜色,
设置图形的大小。
用于设置边框。设置边框颜色设置为黑色,设置宽度。
geoserver官方链接
注:
①有中文需要将编码方式(encodeing)改为GB2312
点击settings,紧接着点击options,勾选override system locale,选择简体中文确定,重启软件即可。
选择图层,进行符号编辑,本文档旨在介绍各个功能的用法及作用。选择对应需要编辑style的图层,右键点击显示菜单,选择change style
(其他的下拉选择框根据实际符号样式需要进行调节,选择即可在左侧看到直观效果);
比如根据国标码过滤则书写格式为:
gbcode=’31010’ 只有当数据的gbcodo码是31010的时候样式才会显示;
gbcode IN (‘31010’,’31020’) gbcode码为这两个值的时候都显示该符号样式
name like ‘%中%’ 模糊匹配,名称