1、优先选择 PostGIS 作为数据源。PostgreSQL 具有优秀的空间索引、属性索引能力,可以提供快速的数据查询
2、次选 GeoPackage。若网络带宽很有限,或其他原因无法使用 PostGIS,
3、再次 Shapefile。 若需要在界面中展示数十万、上百万条数据,并且不涉及属性过滤,只是查看其几何形状
qgis中要设置样式透明度需要从填充配置的内部去改,如下图修改透明图是有效的
但是从总体设置处改是无法应用到 sld 当中的,如下图的修改是不生效的(对于 SLD 来说)
geoserver以tomcat作为服务容器,所以需要依赖 jdk8 或者 jdk11
jdk8的下载地址(点击登录下载,oracle官方地址)
2、配置环境变量
3、环境变量 Path 中添加 %JAVA_HOME%\bin、%JAVA_HOME%\jre\bin
4、cmd中执行 java、javac、java -version 查看环境是否配置成功
geoserver及其插件下载地址
一体化包比较大,2.19.2 的 geoserver 包有 99M 大小,这个版本是基于 jetty 搭建的
下载这个包后,直接解压,并进入其 bin 目录下运行 startup.bat 即可(要有 java 8 或者 java 11 的环境)
此处注意:1、最好使用 cmd 来运行这个 bat 文件;2、windows下运行 .bat 文件,linux 下运行 .sh 文件
解压掉 geoserver 的压缩包,复制里面的 geoserver.war 到 tomcat 的 webapp 下
运行 startup.bat。此处注意:1、最好使用 cmd 来运行这个 bat 文件;2、windows下运行 .bat 文件,linux 下运行 .sh 文件
Linux环境配置(本次的环境使用 centos 7.9 最小安装演示)
1、安装 net-tools(不装就用 ip addr show)、vim (个人习惯,可以不装。不装的话将后面所有 vim 命令换成 vi 即可)
安装net-tools
# yum install -y net-tools.x86_64
安装vim
# yum install -y vim
2、修改本机名及ip地址(把 ip 和 机器名固定下来,最好让客户的网管来做这个事)
1)、查看当前的网卡名,查看有ip地址对应的网卡名(如此处的eth0)
# ifconfig
不装 net-tools 的话就用如下命令查看 ip 地址
# ip addr show
2)、修改网络配置
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改:
最后添加:
3)、重启网卡
# systemctl restart network
4)、修改机器名,步骤一
# vim /etc/hostname
5)、修改机器名,步骤二
vim /etc/sysconfig/network
5)、修改机器名,步骤三,添加 ip 和域名的映射
vim /etc/hosts
6)、使修改立即生效(其实是改临时的机器名,效果一样)
# hostname geoserver
3、开放端口 8080,依次执行
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# firewall-cmd --reload
# firewall-cmd --list-all
2、丢到服务器上并解压(丢到 /usr/local/src)
3、配置环境变量,此处我的 jdk 解压后的目录为 “/usr/local/src/jdk1.8.0_301”。添加环境变量步骤如下
1)、编辑 profile
# vim /etc/profile
跳转到最后面,添加
JAVA_HOME=/usr/local/src/jdk1.8.0_281
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
2)、使用环境变量生效
# source /etc/profile
4、下载 tomcat8
5、丢到服务器上,并解压开( 此处我丢到了 /usr/local/src )
tar -zxvf apache-tomcat-8.5.70-deployer.tar.gz
6、将 geoserver 的 war 包同样丢到解压后的 tomcat 的 webapps 下(war包下载地址见本文上方 windows 安装处)
7、查看 8080 端口是否被占用
# netstat -anp | grep 8080
8、进入 tomcat --> bin 启动 tomcat
9、安装完成后,在客户端访问 http://192.168.1.64:8080/geoserver 查看是否可以访问
geoserver 是 2001年纽约的The Open Planning Project (TOPP)孵化的,基于 java 编写的开源 gis 服务器,它实现了 OGC 的 WMS、WMTS、WFS、WPS 服务类型
geoserver 有两种安装类型,“一体化安装” 和 “基于tomcat 安装”
geoserver 的开发者还开源了另一个项目 GeoTools,这是一个开源的 GIS java 工具包,旨在增强对 shapefile、oracle 等数据库的支持
调整可用内存,防止大数据发布或频繁请求时的堆栈溢出,建议修改为机器内存总量的 25%
进入 tomcat 的 bin 目录下,编辑(编辑前先备份一下)catalina.bat 文件
在文件开头(@echo off下)添加如下内容
set JAVA_OPTS=-server -Xms256m -Xmx2048m
内容含义如下
修改完后重启 tomcat
修改文件 “webapps/geoserver/WEB-INF/web.xml”
tomcat 取消如下内容的注释
<filter>
<filter-name>cross-originfilter-name>
<filter-class>org.apache.catalina.filters.CorsFilterfilter-class>
<init-param>
<param-name>cors.allowed.originsparam-name>
<param-value>*param-value>
init-param>
<init-param>
<param-name>cors.allowed.methodsparam-name>
<param-value>GET,POST,PUT,DELETE,HEAD,OPTIONSparam-value>
init-param>
<init-param>
<param-name>cors.allowed.headersparam-name>
<param-value>*param-value>
init-param>
filter>
修改后如下图
第二处修改处如下,大概在 222行这里,同样解除注释,原始如下
jetty 如下配置,取消注释以下
<filter>
<filter-name>cross-originfilter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilterfilter-class>
<init-param>
<param-name>chainPreflightparam-name>
<param-value>falseparam-value>
init-param>
<init-param>
<param-name>allowedOriginsparam-name>
<param-value>*param-value>
init-param>
<init-param>
<param-name>allowedMethodsparam-name>
<param-value>GET,POST,PUT,DELETE,HEAD,OPTIONSparam-value>
init-param>
<init-param>
<param-name>allowedHeadersparam-name>
<param-value>*param-value>
init-param>
filter>
jetty 做容器的话,将 170 行左右的内容解除注释
第二处修改处如下(与 tomcat 相同),大概在 222行这里,同样解除注释,原始如下
日志记录的过于频繁会显著影响服务器的性能,但是 debug 又要依赖于日志,所以在日常运行时,可以将日志调整为低记录级别
此处将日志记录级别调整为 “PRODUCTION_LOGGING” 级别,以减少日志与服务的IO争夺
另外也可以禁止 “记录到 stdout” 来禁止将日志输出到 tomcat 的控制台
1、以文本形式打开 tomcat --> conf --> server.xml
2、拖到最下面,找到
3、以文本形式打开 tomcat --> conf --> web.xml ,拖到最下方,在
4、重启 tomcat ,浏览器输入 localhost:8080,查看是否跳转到了 geoserver 的主页
以文本形式打开 tomcat --> conf --> web.xml ,搜索 listings,将其值改为 true,默认在 121 行
featuretypes 的含义:featuretypes 又叫特征类型,是"数据存储"的描述类型,如当使用 shapefile 时,一个 feature type 与其 “数据存储” 是一对一的关系(即一个 shapfile 的数据存储就对应一个 feature type),当数据存储使用 postgis 时,feature type 与其的对应关系就是多对一
注意:featuretypes 是按照 工作区来区分的
处于性能提升的考虑,geoserver 会把数据库连接和schema缓存到内存中,参数 “Feature type cache size” 的值应当大于并发连接的 featuretypes(特征类型) 的数量。
进入 tomcat 的 conf 目录,找到server.xml
大概在70行,找到 port=“8080” 改成你需要的端口即可
1、可以删除 tomcat —> webapps 里面的非 geoserver 东西,但是 geoserver.war 和 geoserver 的目录一定不要删任何一个
1、若数据源是 shapefile ,尽量保持 “数据存储” 和 “图层名”(即服务名)保持一致
2、若数据源是 pgsql,则 “图层名”(即服务名)尽量以 "数据存储-服务名"形式命名
若不开启 jsonp 则 wfs 服务的 返回格式无法使用 “text/javascript” 的格式
开启方式,进入 webapps/geoserver/WEB-INF/web.xml ,修改大概 43 ~ 48 行内容(解除注释就行),原始如下
修改后如下
修改完后重启 tomcat
功能:当调用的 WMS 服务存在切片时,直接返回切片而不让服务器重新生成
注:GWC的集成与 openlayers 预览不兼容,因为 openlayers 的请求图片边界与 GWC 图层的不匹配,openlayers 会使用图层的 bounding box 来计算切片原点,当 bounding box 与 gridset 相同时,openlayers 也可调用 GWC 的切片数据
开启方式:
进入 geoserver --> caching defaults ,如下图,开启
调用条件(如下条件全部满足才可调用切片)
1、geoserver端
2、客户端
3、geoserver 和 客户端共同
启动 geoserver 见安装的后半部分,此处略
浏览器打开 http://localhost:8080/geoserver 会进入 geoserver 的主页
此处注意:
1、若修改了 tomcat 的端口,则地址中的 8080 修改为对应的端口
2、若开启了 tomcat 的 https 访问,则地址中的 8080 换成 8443 (如果修改了,那换成对应的)
3、直接访问 http://localhost:8080/ 不会跳转到 geoserver 的主页,而是进入 tomcat 的主页 或者 jetty 的主页(jetty 这个是被阉割的,所以主页会提示找不到)
geoserver 默认账号密码是 admin / geoserver
1、配置切片的存储目录,修改 web.xml 文件,其地址为 geoserver --> WEB-INF —> web.xml
在
GEOWEBCACHE_CACHE_DIR
你的geowebcache切片的目录
geoserver 中的 Tile Caching 就是基于 GeoWebCache 完成的
支持的操作如下图,其主要信息如下:
http://localhost:8080/geoserver/gwc/demo
常用的切图方法:
关于切图的建议:
- 图块大小优先选择 512 * 512 以避免出现部分区域数据空白的情况
- 图片类型尽量选择 jpg,质量可以通过调整压缩率来调整。若使用 png 则切片会大 6 倍左右(有透明通道的情况下)
- 底图的范围要比项目展示数据的范围大一些,否则在预览数据边界时会前端会疯狂提示404(找不到切片资源, 因为周围没数据)
1、安装 mbtiles 插件(见后方的插件安装)
2、QGIS中进行配图
4、调整参数,着重注意
5、mbtiles类型的数据需要使用插件进行发布(或者也可以前端使用插件,直接读取 mbtiles 文件)
其他所有参数均保留默认,保存完后 自动读取 pg 的当前 schema 中的表,可以直接在此处选择发布
3、确认发布
5、设置切片方案的名称、坐标系、范围、切片尺寸(建议512*512)、添加切片的层级
7、勾选图片(jpg、img)、选择切片方案并保存(如果需要则调整样式)
8、进入切片目录(gwc目录 http://localhost:8080/geoserver/gwc)
10、选择刚才的图层,点击 “Seed this layer”
11、设置参数,参数含义如下
其实在发布矢量数据的WMS时候就自动发布了WFS,只不过默认开启的是 basic 的形式(只读形式的 WFS),只需要添加写入的权限即可
另:WFS的数据源并不只支持 SDE,即使数据源是 shapefile 也可以在前端进行修改,但是还是建议用 SDE(postgis)的数据源,毕竟数据库支持 mvcc
2、每个工作区添加一个单独的权限,若某工作区之前已经添加了权限,则无须再次添加
3、下图中的红框都要进行调整,调整依据如下:
4、保存之后,WFS即可立即支持写入操作,无须重启 geoserver
5、默认的 WFS 地址( http://localhost:8080/geoserver/ows?service=wfs&version=1.1.0&request=GetCapabilities ),一般把这个参数给到前端就行了。如果前端经验不是很丰富,可能需要提供内部的工作区名和图层名
6、(可选)这个地址也可以用软件调用,然后抓一下网络请求,把网络请求给前端(如果前端拿到这个还调不出来,那就不用管了,只要保证用 QGIS 或者 ArcGIS 能调出来就行)
注记在 geoserver 中是以样式文件(SLD)存储的,可以使用 QGIS 先配置好注记和配色,然后将样式导出为 SLD 文件,直接应用到服务即可(注记可以支持掩膜)
注记配置过程可见本文的”样式配置“
图层组相当于arcmap的mxd,将多个图层组织到一起进行发布,目前仅支持WMS服务
2、调整"工作区"、手动输入"边界"、手动输入"坐标系"、设置"模式"、添加图层
图层组模式
注意:图层从上到下的顺序与ArcGIS的图层是反的,即越靠下的图层在实际渲染时越靠上
矢量切片的优势
- 渲染由客户端完成,代表渲染的样式可以在客户端自由修改
- 矢量瓦片的体积比切片要小的多,网络传输更快
- 可以达到很高的显示精度
- 客户端可以拿到矢量数据,代表客户端可以通过矢量数据做非常复杂的渲染
2、将解压后的数据放到 tomcat --> geoserver --> web-inf --> lib
3、重启 geoserver,进入矢量服务的 Tile Caching 支持了 4 种矢量切片格式(application/vnd.mapbox-vector-tile 是效率最高的)
5、配置完后从 Tile Layers 里的预览方式里已经可以看到支持矢量切片了
6、从预览界面可以看到,图层正常加载,并且请求的数据类型确实为 mvt 的矢量切片,并且请求方式也确实为 wmts
9、切片正常生成
官方地址
下载(下载 plunin 那个就行, store 那个可以不下)
将解压出来的 jar 包全部复制,粘贴到 tomcat —> webapp --> geoserver --> WEB-INF --> lib 中,有提示需要替换就替换
如:apache-tomcat-8.5.56\webapps\geoserver\WEB-INF\lib
重启 tomcat 即可,打开 geoserver --> 新建数据存储 此处可以看到 mbtiles 类型
打开文件 tomcat-users.xml,该文件位于 tomcat 安装目录的 conf 下
在倒数第二行添加如下内容
在修改另一个文件 context.xml,位于 apache-tomcat-8.5.56\webapps\manager\META-INF
浏览器打开 http://localhost:8080/manager/html
修改 web.xml 文件,位于 apache-tomcat-8.5.56\webapps\manager\WEB-INF
调整下图的值,适当扩大即可
2、配置环境变量,添加三个环境变量
GDAL —— C:\Program Files\GDAL
GDAL_DATA —— C:\Program Files\GDAL\gdal-data
GDAL_DRIVER_PATH —— C:\Program Files\GDAL\gdalplugins
3、打开 cmd 运行 gdalinfo 查看是否正常
如上图提示 org_MSSQLSpatial.dll 找不到指定模块,如果用不到 ms sql 的话,直接把这个文件删掉就行。这个文件位于 C:\Program Files\GDAL\gdalplugins
删掉上述文件,重新运行在cmd中 gdalinfo
5、解压 gdal压缩包,安装扩展即可
6、查看 gdal 扩展是否安装成功(python -m pip show gdal)
geoserver 默认无法发布 .img 格式的影像
将 img 转换为 tif 的代码如下
from osgeo import gdal
img = r"E:\DEM\DEM30.img"
tif = r"D:\temp\tif\DEM30.tif"
# 读取数据
img_ds = gdal.Open(img)
# 转出为 tif 模式
gdal.Translate(tif, img_ds, format="GTiff")
将图片保存到 geoserver 的工作空间的 styles 内部(如:D:\softs\apache-tomcat-8.5.56-windows-x64\apache-tomcat-8.5.56\webapps\geoserver\data\workspaces\Test\styles)
Point as graphic
GeoServer SLD Cook Book: Point as graphic
image/png
32
1、原始数据如下,测试修改 1个属性字段(new_osm_id)和1个几何字段(geom)
2、将 new_osm_id 改为 new_new_new_new_osm_id
Geojson可正常返回(WFS服务也正常)
索引是否正常
1)、修改几何字段,空间索引会自动更新。但是不确定只是修改了索引指向的字段名还是进行了索引重建
2)、修改属性字段,属性索引也会自动更新
结论:
1、 无论属性或几何字段均可通过 sql 去修改字段名
alter table xxx rename old_field_name to new_field_name
2、属性或几何字段修改完可以选择在页面上对数据进行“重载”或者直接重启 geoserver(tomcat),服务(WMS、WFS)即可正常访问
3、无论修改的是几何字段还是属性字段,索引都会自动改变到对应字段上