使用Openlayer利用GeoServer编辑要素到postGIS注意问题(WFS-T)
来源:互联网 发布:王中磊和女星 知乎 编辑:程序博客网 时间:2024/05/01 16:37
Openlayer+GeoServer+PostGIS是最常用的开源GIS解决方案,对要素进行编辑是GIS中常用操作之一。本文对使用Openlayer利用GeoServer编辑要素到PostGIS的注意问题进行说明。
一、空间数据库PostGIS注意问题
1. PostGIS中进行编辑的数据表应具有编辑的权限,如Insert、Update、Delete,设置方法见下图。通过添加/修改用户/组,将权限赋予相应的用户。
2. 数据表中几何字段(geom/geometry)的类型(Point/MultiPoint、LineString/MultiLineString、Polygon/MultiPolygon)应与Openlayer中编辑要素的几何类型一致,如不为一个为Point,一个为MultiPoint。这应在创建表格或Shapefile文件入库时确定(详细信息可参见Shapefile导入PostGIS的两种方法介绍及比较),或在Openlayer中对要素的几何类型进行设置。
3. 进行WFS-T操作的数据表,必须有主键(primary key),否则会出现read-only的错误提示。
二、GIS服务器GeoServer注意问题
1. 因WFS-T操作涉及事物,故WFS服务的级别应为Transaction/Complete,如下图所示:
2. 若在ajax请求中没有设置连接GeoServer的用户名和密码(username/password),则应在Security→Data中进行设置,将ROLE_ANONYMOUS添加到选择的角色中,如下图所示。但是这种设置有弊端,一旦其他用户知道了GeoServer中WFS的地址,就能对数据进行随意修改。
3. 可在设置→全球中,设置以开发者模式(Developer)记录WFS执行的详细信息,通过日志可查看WFS执行的详细过程,遇到问题也能快速定位问题所在并解决,如下图所示。日志文件在 data_dir路径的logs文件夹下,记录个人资料可选择GEOTOOLS_DEVELOPER_LOGGING.properties或VERBOSE_LOGGING.properties,后者记录的信息更详细,其他区别还不清楚。
三、前端Openlayers注意问题
1. 若Web服务器和GIS服务器不在同一个域下,会存在跨域访问的问题,解决方法详见博客Openlayers WFS 跨域问题解决思路。
2. 代码中编辑要素的几何类型,尤其是新增要素的几何类型(体现在Draw空间的type设置上),必须与PostGIS中数据表几个类型一致,如同为Point/LineString/Polygon,不能一个为Point,另一个为MultiPoint。
3. 为了数据安全,在没有将ROLE_ANONYMOUS增加到Selected Roles时,必须在ajax请求中设置连接GeoServer服务器的用户名和密码(username/password)。
4. PostGIS中数据表的几何字段名称默认为geom,Openlayers中要素的几何字段名称为geometry,此时待入库的要素必须有geom字段,否则入库后几何字段为空,此时可进行如下设置。若在创建数据表时已将几何字段名称设置为 geometry,则不用设置。
feature.set('geom',feature.getGeometry());
5. 实测发现,PostGIS中主键(ID)是自动生成的,即使在代码中进行如下设置,也不起作用。
feature.set('id',/*主键值*/);
四、总结
进行WFS-T操作,经常出现 read-only 和 插入后几何字段为空 的问题,下面对出现这两种问题的原因进行总结。
1. read-only问题可能的原因为:1)用户没有对数据表进行编辑的权限, 2)PostGIS中数据表的几何类型与待编辑要素的几何类型不一致, 3)没有设置ROLE_ANONYMOUS或ajax请求时没有设置用户名和密码(username/password), 4)服务级别没有达到事物操作, 5)数据表中没有设置主键(id,primary key)。
2. 插入要素后几何字段为空的原因,则是因为数据表中几何字段名称(geom)与要素默认名称(geometry)不一致造成的,应在Openlayers中进行设置。
- 使用Openlayer利用GeoServer编辑要素到postGIS注意问题(WFS-T)
- geoserver wfs(-t)
- Geoserver + openlayer wfs
- PostGIS+GeoServer+OpenLayer随笔!
- GeoServer基础教程(六):使用GeoServer发布PostGIS表数据
- geoserver+openlayer
- postgis安装注意问题
- postgis安装注意问题
- OpenLayer+PostGIS+GeoServer--无额外后台实现地理分析与查询框架
- OpenLayer+PostGIS+GeoServer--无额外后台实现地理分析与查询框架
- Geoserver发布PostGIS地图数据:问题记录
- 使用GeoServer发布PostGIS表数据
- 【postgis&geoserver】在postgis中建立空间数据库并发布到geoserver
- 使用GeoServer发布shp数据为WMS服务和WFS服务(图文教程)
- openlayer之加载wfs服务
- GeoServer-WMS,WFS,WCS
- openlayer web 要素查询
- geoserver+postgis+postgresql+arcgis
- PHP实现分页
- 基于IRIS(鸢尾花)数据集使用sklearn的特征工程练习
- minikube在mac单机上部署kubernetes沙箱环境
- Solidworks 如何在曲面添加文字
- IM即时通讯(三) 多客户端文本传输之聊天功能
- 使用Openlayer利用GeoServer编辑要素到postGIS注意问题(WFS-T)
- mybatis学习三 多级结果映射
- day05
- c#猜数字小游戏
- Machine Learning Application
- Unity 小项目:模拟太阳系
- 华为oj初级 合法IP
- int abs(int number)函数有感: 求补码和通过补码求对应的整数 C++(增加:数字的二进制表示中1的个数)
- Linux20条基础命令