GeoServer发布数据库中的空间数据表

article/2025/10/26 5:59:01

如何利用GeoServer发布PostgreSQL/PostGIS中的空间数据

        • 1.矢量数据发布
        • 2.栅格数据发布
          • 2.1 安装Image Mosaic JDBC扩展
          • 2.2 准备金字塔和瓦片
          • 2.3 创建配置文件
          • 2.4 创建数据库
          • 2.5 发布数据
          • 2.6 可能遇到的坑

实际工作中,数据存储在本地的情况应该不多,大多数都是存储在数据库中,那么Geoserver如何以数据库作为数据源发布地图服务呢,GeoServer支持绝大多数主流的空间数据库,比如PostGIS、H2、ArcSDE、DB2、MySQL、Oracle、Microsoft SQL Server 等。下面以PostGIS为例,说明GeoServer以空间数据库作为数据源发布地图服务的过程

1.矢量数据发布

(1) 将数据存储到PostGis中
如果创建一个PostGIS数据库就不提了,PostGIS提供了导入shp数据的工具shp2pgsql,使用方法可以参考这篇文章:
PostGIS导入矢量数据和栅格数据

shp2pgsql -s 3587 -c -W 'gbk' China_province.shp China_province | sudo -u postgres psql -d test
shp2pgsql -s 3587 -c  -W 'gbk' weather_station.shp China_weather_station | sudo -u postgres psql -d test
raster2pgsql -s 4326 -I -C -M China_dem -F -t 256x256 China_dem | sudo -u postgres psql -d test

这里在数据库中存储了两个矢量数据,一个栅格数据。
(2) 从postgis创建stores
选择Stores ‣ Add a new store ‣PostGIS
在这里插入图片描述参数配置完成后点击save保存后就可以看到数据库中所有数据。
在这里插入图片描述
(2)发布数据
选择要发布的数据点击Publish,发布过程和从文件发布数据没有区别。

(3)在openlayers中预览
在这里插入图片描述
ps:也可以创建stores完成后直接发布
另外,GeoServer也可以发布PostGIS中的视图(View),和发布数据表(Table)没有区别,但是要求这个视图必须在geometry_columns中。如果没有需要手动创建。

INSERT INTO geometry_columns VALUES ('','public','my_view','my_geom', 2, 4326, 'POINT' );

2.栅格数据发布

利用GeoServer发布栅格数据比较麻烦,需要用到Image Mosaic JDBC插件,直接在下图中对China_dem点Publish是不可以的,如果可以,我希望永远也不要用GeoServer发布PostGis中的栅格数据。
在这里插入图片描述下面的内容翻译自官方文档,有任何疑问请参考GeoServer官网原文

2.1 安装Image Mosaic JDBC扩展

(1)下载Image Mosaic JDBC

wget https://sourceforge.net/projects/geoserver/files/GeoServer/2.14.1/extensions/geoserver-2.14.1-imagemosaic-jdbc-plugin.zip

版本一定要匹配,这里下载的是针对GeoServer 2.14.1的扩展,其它版本请去官网下载对应的扩展
(2)移动这个包到WEB-INF/lib目录下

sudo cp gt-imagemosaic-jdbc-20.1.jar $GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib

(3)重启GeoServer就可以New Data Source下看到刚才添加的扩展了。
在这里插入图片描述

2.2 准备金字塔和瓦片

ps:如果对这两个概念有疑问的请百度。
GeoServer推荐利用gdal_retile工具(需要安装gdal)切割瓦片,命令如下:

gdal_retile -co "WORLDFILE=YES"  -r bilinear -ps 128 128 -of PNG -levels 3 -targetDir tiles China_dem.tif

完成后在当前目录会有一个tiles文件夹,里面是切割好的瓦片数据。

2.3 创建配置文件

配置文件可以放在任意位置,但它们需要在同一目录。
(1) connect.postgis.xml.inc

<connect><dstype value="DBCP"/><username value="postgres"/><password value="postgres"/><jdbcUrl value="jdbc:postgresql://localhost:5432/test"/><driverClassName value="org.postgresql.Driver"/><maxActive value="10"/><maxIdle value="0"/>
</connect>

(2) mapping.postgis.xml.inc

<spatialExtension name="postgis"/>
<mapping><masterTable name="dem" ><coverageNameAttribute name="name"/><maxXAttribute name="maxX"/><maxYAttribute name="maxY"/><minXAttribute name="minX"/><minYAttribute name="minY"/><resXAttribute name="resX"/><resYAttribute name="resY"/><tileTableNameAtribute  name="TileTable" /><spatialTableNameAtribute name="SpatialTable" /></masterTable><spatialTable><keyAttributeName name="location" /><geomAttributeName name="data" /><tileMaxXAttribute name="maxX"/><tileMaxYAttribute name="maxY"/><tileMinXAttribute name="minX"/><tileMinYAttribute name="minY"/></spatialTable>
</mapping>

(3) dem.postgis.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [<!ENTITY mapping PUBLIC "mapping"  "mapping.postgis.xml.inc"><!ENTITY connect PUBLIC "connect"  "connect.postgis.xml.inc">]>
<config version="1.0"><coverageName name="dem"/><coordsys name="EPSG:4326"/><!-- interpolation 1 = nearest neighbour, 2 = bilinear, 3 = bicubic --><scaleop  interpolation="1"/><verify cardinality="false"/>&mapping;&connect;
</config>
2.4 创建数据库
sudo java -jar $GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib/gt-imagemosaic-jdbc-20.1.jar ddl -config dem.postgis.xml -spatialTNPrefix tiledem -pyramids 3 -statementDelim ";" -srs 4326 -targetDir sqls

执行完成后在sqls文件夹会有四个.sql文件
在这里插入图片描述
依次执行

sudo -u postgres psql -d test -f sqls/createmeta.sql
sudo -u postgres psql -d test -f sqls/add_dem.sql 

然后数据库在就会出现5个表,分别是dem,demile_0,demtile_1,demtile_2,demtile_3
接下来要做的就是把数据存入数据库了。

java -jar $GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib/gt-imagemosaic-jdbc-20.1.jar import -config dem.postgis.xml -spatialTNPrefix tiledem -tileTNPrefix tiledem -dir tiles -ext png

到此,数据已经存入到数据库了
在这里插入图片描述

2.5 发布数据

在New Data Source中选择Raster Data Sources中的ImageMosaicJCBD
在这里插入图片描述
url中填写dem.postgis.xml的绝对路径。
点击save没有出错说明创建Stores成功了,后面的发布过程与其它数据的发布并无差异。

2.6 可能遇到的坑
  1. 如果在利用imagemosaic-jdbc数据导入PostGIS的过程中出现ClassNotFoundException: org.postgresql.Driver的错误,请用-Xbootclasspath/a指定postgresql.jar的路径,如下:
java -Xbootclasspath/a:$GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib/postgresql-42.1.1.jar -jar $GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib/gt-imagemosaic-jdbc-20.1.jar import -config dem.postgis.xml -spatialTNPrefix tiledem -tileTNPrefix tiledem -dir tiles -ext png
  1. 上述过程执行的几条命令和配置文件中某些参数是对应的,操作过程中需要注意。

http://chatgpt.dhexx.cn/article/VgtFLY9p.shtml

相关文章

【数据结构】顺序表的实现

文章目录 一、顺序表概念及结构二、动态顺序表和静态顺序表的选择三、动态顺序表的实现逻辑&#xff08;1&#xff09;创建结构体&#xff08;2&#xff09;具体函数实现&#xff08;*&#xff09;顺序表初始化&#xff08;*&#xff09;释放顺序表&#xff08;*&#xff09;打…

mysql:详解创建表的常用数据类型

1.什么是数据类型 数据类型是指列、存储过程参数、表达式和局部变量的数据特征&#xff0c;它决定了数据的存储格式&#xff0c;代表了不同的信息类型。 有一些数据是要存储为数字的&#xff0c;数字当中有些是要存储为整数、小数、日期型等... 2.mysql常见数据类型 整数型浮…

群晖服务器创建文件夹,群晖Synology 创建共享文件夹视频图文教程

群晖 Synology 是 NAS网络存储服务器,虽然它的操作大部分都跟 Windows 差不多,但是还是有些许不同。今天我们就来学习学习如何创建群晖 Synology NAS网络存储服务器的共享文件夹。共享文件夹,可以理解为在 Windows 上的 C 、D、E盘或者是盘中的根目录。由于群晖 Synology NA…

【Windows10】Win10存储空间的作用以及如何创建存储空间

本文目录 一、不得不说的话 二、存储空间的作用 三、如何创建存储空间 四、特别提示 一、不得不说的话 默认情况下&#xff0c; Windows10 系统的控制面板中会有一个“储存空间”选项&#xff0c;不过大多用户都不知道这个选项有什么作用。接下来&#xff0c;就在本文中具…

win10下docker安装oracle及创建表空间

1、拉取oracle镜像 docker pull jaspeen/oracle-11g 2、查看镜像 docker images 3、下载oralce安装文件并解压 4、启动镜像 docker run --privileged --name oracle11g -p 1521:1521 -v D:\oracle:/install jaspeen/oracle-11g 5、等待安装完成显示如下&#xff1a; 6、更…

ejb模式_EJB的完整形式是什么?

ejb模式 EJB&#xff1a;企业Java Bean (EJB: Enterprise Java Bean) EJB is an abbreviation of Enterprise Java Bean. EJB is one of many Java application programming interfaces (API) for flexible and manageable structuring of Java Platform, Enterprise Edition (…

到底EJB是什么?

&#xfeff;&#xfeff; 到底EJB是什么&#xff1f;被口口相传的神神秘秘的&#xff0c;百度一番&#xff0c;总觉得没有讲清楚的&#xff0c;仍觉得一头雾水。百度了很久&#xff0c;也从网络的文章的只言片语中&#xff0c;渐渐有了头绪。 用通俗话说&#xff0c;EJB就是&a…

什么是EJB?不再神秘!

1. 我们不禁要问&#xff0c;什么是"服务集群"&#xff1f;什么是"企业级开发"&#xff1f; 既然说了EJB 是为了"服务集群"和"企业级开发"&#xff0c;那么&#xff0c;总得说说什么是所谓的"服务集群"和"企业级开发&…

jndi(是什么)和ejb容器的关系

如下: 转载了几篇关于ejb jndi的文章&#xff01; 转载: http://blog.csdn.net/zhaosg198312/article/details/3979435 JNDI避免了程序与数据库之间的紧耦合&#xff0c;使应用更加易于配置、易于部署。 JNDI的扩展&#xff1a; JNDI在满足了数据源配置的要求的基础上&#xff…

EJB是什么?

来源&#xff1a;http://blog.csdn.net/jojo52013145/article/details/5783677 1. 我们不禁要问&#xff0c;什么是"服务集群"&#xff1f;什么是"企业级开发"&#xff1f; 既然说了EJB 是为了"服务集群"和"企业级开发"&#xff0c;那…

EJB到底是什么

百科定义EJB&#xff1a; 被称为java企业bean&#xff0c;服务器端组件&#xff0c;核心应用是部署分布式应用程序。用它部署的系统不限定平台。实际上ejb是一种产品&#xff0c;描述了应用组件要解决的标准 标准&#xff1a; 可扩展 (Scalable)分布式 (Distributed)事务处理(T…

EJB是什么,以及weblogic和tomcat的区别

首先说一下weblogic和tomcat的区别 weblogic是 java应用服务器 用于开发、集成、部署和管理大型分布式web应用、网络应用和数据库应用 将java的动态功能和java enterprise标准的安全性引入大型网络应用的开发集成部署和管理之中。 weblogic中有domain &#xff0c;域是作为一…

到底EJB是什么

到底EJB是什么&#xff1f;被口口相传的神神秘秘的&#xff0c;百度一番&#xff0c;总觉得没有讲清楚的&#xff0c;仍觉得一头雾水。百度了很久&#xff0c;也从网络的文章的只言片语中&#xff0c;渐渐有了头绪。 用通俗话说&#xff0c;EJB就是&#xff1a;"把你编写的…

EJB是什么

1. 我们不禁要问&#xff0c;什么是"服务集群"&#xff1f;什么是"企业级开发"&#xff1f; 既然说了EJB 是为了"服务集群"和"企业级开发"&#xff0c;那么&#xff0c;总得说说什么是所谓的"服务 集群"和"企业级开发…

EJB到底是什么,真的那么神秘吗?

百科定义EJB&#xff1a; 被称为java企业bean&#xff0c;服务器端组件&#xff0c;核心应用是部署分布式应用程序。用它部署的系统不限定平台。实际上ejb是一种产品&#xff0c;描述了应用组件要解决的标准 标准&#xff1a; 可扩展 (Scalable)分布式 (Distributed)事务处理(T…

程序无法正常启动(0xc000007b) 解决的过程

版权声明&#xff1a;转载需标明该文链接。 https://blog.csdn.net/zaibeijixing/article/details/87785073 解决&#xff08;2019/2/20&#xff09; 之前基于opencv 的项目都完全没问题&#xff0c;现在新建的一个opencv程序出现上述错误。查阅网上资料&#xff0c;自己摸索&a…

“0xc000007b无法正常启动”我的解决方案

关于这个问题&#xff0c;网上有很多解决方案&#xff0c;但是你得找到自己的问题在哪。 有的说DirectX 9.0损坏&#xff0c;我试着恢复了一下&#xff0c;还是没有得到解决。 还是DLL的问题&#xff0c;可能是缺少或者32位和64位使用不合适。 我的问题最开始不是这个&#xf…

应用程序无法正常启动0xc000007b怎么解决

我们平时在使用电脑时&#xff0c;打开应用或者安装某些软件例如MySQL&#xff08;博主本人就是在安装MySQL时遇见的&#xff09;&#xff0c;有时候会出现提示“应用程序无法正常启动0xc000007b”&#xff0c;这个问题的原因是什么呢&#xff1f;博主本人去简单了解了一下&…

计算机无法启动应用程序怎么办,应用程序0xc000007b无法正常启动解决办法

最近经常有有用户在电脑系统上操作运行程序时就出错了&#xff0c;且遇到提示“应用程序无法正常启动(0xc000007b)”。这该怎么办呢&#xff1f;接下来&#xff0c;小编就向大家介绍应用程序无法正常启动提示错误0xc000007b的原因和解决方法。 出现“应用程序无法正常启动0xc00…

aapt 命令可应用于查看apk包名、主activity、版本等很多信息

aapt命令小结 互相学习&#xff0c;请关注我的微博&#xff1a;weibo.com/ganchaojiang aapt即Android Asset Packaging Tool.本文小结了一下该工具的用法。 1. aapt l[ist] [-v] [-a] file.{zip,jar,apk} List contents of Zip-compatible archive. 1.1 列出压缩文件目录…