使用GeoServer发布PostGIS数据

标签: Geoserver 分类: 软件 创建时间:2019-04-23 08:36:09 更新时间:2025-01-17 10:39:23

前言

有些使用使用GeoServer发布地图的时候,用Shape文件比较方便,因为ArcMap可以直接导出Shape文件,然后将Shape文件拷贝到服务器上就可以发布了,但是也存在缺点,就是Shape文件的字段值最大支持255个字符,从10.2.2开始,Shape文件中的中文字段名也只能是三个了,超过三个将会被截断。所以,放弃Shape文件,改用PostGIS数据库的形式发布地图服务,是一个不错的选择。

1.安装Postgres

(1) 下载地址
(2) 安装,这个没啥好说的,修改安装位置->修改数据文件存放位置->选择安装的组件(都选上就好了)->设置默认的用户密码->选择端口号->一路next,等待安装成功就可以了。

2.安装PostGIS

(1) 1PostGIS不需要单独下载,上一步的最后,Postgresql安装完成最后会显示一个Finish按钮,并默认打开Stack Builder,如果没有,就在开始菜单中的PostgreSQL文件夹下打开。选择安装(也就是本机服务器)位置,PostgreSQL就可以了。

(2) 然后下一步,选择需要下载安装的组件,这里找到PostGIS

(3) 选择下载位置,点击下一步

(4) 下载完成,就可以安装了

(5) 选择同意协议->选择安装组件(默认)->安装位置(默认)->安装

(6) 接下来会弹出几个提示框,设置环境变量,设置关联等,都选是,没毛病。

(7) 完成
注意
(1) 使用Stack Builder没有翻墙的话,可能不能正常下载PostGIS,总是出现未响应。

可以下载离线版本的Postgis,然后手动安装。PostGIS管网的地址,还是有些问题的,总是找不到在哪里下载可执行文件,后来找了很久,打开下载地址,选择合适的版本的exe,双击打开安装。

期间可能还要设计环境变量什么的,根据需要进行选择是或者否

3.新建地理数据库

(1) 开始菜单->PostgreSQL 11->pgAdmin 4,打开PostgreSQL网页控制台

(2) 点击左侧Server,输入密码,登录服务器

(3) 右键Databases,选择创建

(4) 在pgAdmin III中,新建数据库的时候,会有一个postgis_22_simple模板,有些文章中会说要选中他,但是pgAddmin4中没有这个选项了,那就默认好了。

pgAdmin III中新建数据库

4.安装OSGeo4W

PostGIS自带了将shape文件导入到PostgreSQL的工具,但是为了实现将ArcGIS中的文件地理数据库(File Geodatabase)导入到PostgreSQL数据库中,需要借助第三方软件OSGeo4W。

(1) [下载](<https://trac.osgeo.org/osgeo4w/)

(2) 双击安装包,选择 Advanced Install

(3) 选择从网络下载安装,看这几个选项,也是可以先下载下来然后从本地文件中安装的。

(4) 选择安装的目录

(5) 选择下载目录

(6) 选择是否通过代理下载

(7) 选择从哪个网站下载,选择第三个网址好像快点,http://www.norbit.de

(8) 选择下载哪些软件,这里搜索gdb,选择gdal-filegdb,上面的奇怪的字母是什么不知道,但是点击下Skip,就可以看到安装的版本了,然后点击后面的B和S那一列,好像是有x号的就是选中,没有x号的就没有选中(这设计也是有点反人类了)。

(9) 有个短暂的下载

(10) 选择同意协议

(10) 接下来是下载你选中的组件,可以说是巨慢。

(11) 下载完了,也就安装完成了。

(12) 安装完成会在桌面上出现一个OSGeo4W文件夹,里面有个shell快捷方式,双击可以shell,相关的命令就在里面输入。

5.将File Geodatabase数据导入到PostgreSQL中

(1) 打开OSGeo4W的shell,即上一步桌面文件夹里面的哪一个快捷方式打开的命令行。

(2) 查看OSGeo4W支持哪些格式,shell命令行中输入ogrinfo –formats

(3) 输入转换命令,dbname为第四步创建的数据名,”D:/Data/JCData.gdb”是自己的gdb。

1
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 user=postgres password=XXX dbname=jhdzzhd" D:/Data/JCData.gdb -overwrite -progress --config PG_USE_COPY YES

(4) 导入成功后,PostgreSQL数据库jhdzzhd中就有数据了。

6.GeoServer发布PostGIS数据

(1) 下载安装就略过了(安装Java、Tomcat,下载geoserver.war放到Tomcat\webapp目录下即可)

(2) 打开 localhost:8080/geoserver,登录

(3) 新建数据存储,选择PostGIS数据源

(4) 填写用户名、密码和数据库名称等信息

(5) 将数据存储发布为图层,可以选中上一步直接发布,也可以选中图层,添加新的数据资源,选择自己创建的数据存储。

(6) 发布时一个数据存储中有三个图层,选择第一个发布就可以了。

7.GeoServer发布PostGIS数据后,使用CQL_FILTER语句进行查询

在GeoServer中发布地理数据之后,通常用CQL_FILTER语句进行空间数据的查询,包括点在多边形内,BBOX等,在GeoServer用户手册中,有对CQL_FILTER进行空间查询的详细描述。主要是构造url,传入适量的参数,请求获取数据即可。对于空间查询,很重要的一点就是查询的图形属性,例如,在以shape为原始数据发布WFS服务时,默认的字段名the_geom标志了矢量数据的点线面坐标,查询时的构造的CQL_FILTER通常为

1
cql_filter=INTERSECTS(the_geom,POINT(-74.817265%2040.5296504))

而对于PostGIS发布的数据来说,是不存在the_geom字段的,那么PostGIS又是如何存储了图像的坐标数据呢?在Navicate中可以查看数据库,有个特殊的字段shape(也有可能是其他的),里面存储了PostGIS特有的图形数据。

使用pgAdmin4查看是这样的,同样也标志了shape字段就是the_geom字段。

现在可以构造CQL_FILTER查询语句

1
cql_filter=INTERSECTS(shape,POINT(-74.817265%2040.5296504))
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。