首页 理论教育 WebGIS设计与开发教程-查询和编辑要素

WebGIS设计与开发教程-查询和编辑要素

时间:2023-08-24 理论教育 版权反馈
【摘要】:前面我们已经使用GeoServer发布了地图服务,本节将介绍使用OpenLayers查询和修改发布的要素服务。首先分析一下查询要素的思路,第五章介绍了在底图上加载用户自己发布的WFS和WMS服务,通过URL地址请求加载。接下来我们介绍编辑要素部分,这里的编辑要素只针对要素的属性字段进行编辑。

WebGIS设计与开发教程-查询和编辑要素

前面我们已经使用GeoServer发布了地图服务,本节将介绍使用OpenLayers查询和修改发布的要素服务。

首先分析一下查询要素的思路,第五章介绍了在底图上加载用户自己发布的WFS和WMS服务,通过URL地址请求加载。当然,这种加载本身就是一种查询要素的请求。

但是在实际生产中,我们可能想用查询条件进行一些复杂的过滤,而不是一次把数据全部加载过来。在URL中出现了多条件的查询,例如:http://localhost:8080/geoserver/wh_outlines/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wh_outlines:metro_wh_outline&maxFeatures=50&outputFormat=application%2Fjson&srsname=EPSG:4326。这个URL,请求的地址是http://localhost:8080/geoserver/newyork/wfs,而问号后面的内容就可以看作组合的多个过滤条件,多个过滤条件之间用“&”符号进行连接。例如,service=WFS,表示用户请求的是WFS服务;version=1.0.0,表示版本为1.0.0;outputFormat=application/json,表示类型为application/json;srsname=EPSG:4326,表示WFS图层数据的实际投影坐标系,即指定地图显示时设置的投影坐标系,这里一般和view设置的projection对应。

那么,如果maxFeatures改为2会有什么效果呢?我们可以看到如图6-6所示的效果图。

图6-6 maxFeatures=2效果图

在浏览器中输入这个URL查看,我们可以看到只获得了部分而非全部的数据。其实从字面含义就可以看出,“maxFeatures=2”这个过滤条件就限定了用户最多获取2个Feature。

更进一步地,如果我们继续添加过滤条件“&cql_filter=in(ˈmetro_wh_outline.1ˈ)”,可以看到查询到的json数据中id只包含id为“metro_wh_outline.1”这个值的结果(图6-7)。对应地,在地图上的显示结果如图6-8所示。

图6-7 json数据

图6-8 地图显示结果

如果把筛选条件改为“&cql_filter=not in(ˈmetro_wh_outline.1ˈ)”呢?我们可以很直观地看到图6-9中筛选出了除id为“metro_wh_outline.1”以外的线要素。

图6-9 地图显示结果

CQL(Common Query Language,通用查询语言)是OGC为目录Web服务规范创建的查询语言,不像基于XML的编码语言,CQL使用我们更熟悉的文本语法编写,具有更好的可读性和适应性。它提供了一种更类似于SQL的灵活语言。之前使用的cql_filter就是一种CQL语言。关于更多CQL的知识,读者可以去相关网站(https://docs.geoserver.org/latest/en/user/filter/ecql_reference.html#filter-ecql-reference)了解更多。

接下来我们介绍编辑要素部分,这里的编辑要素只针对要素的属性字段进行编辑。

下面详细列出主要代码。

首先是html部分,html部分定义了div用来存放地图,同时定义了一个弹出框popup用来查看要素的属性字段等信息:

(www.xing528.com)

【说明】CustomToolbarControl是定义了一个函数,在其中定义了编辑要素的按钮和按钮的点击事件函数(通过点击编辑要素按钮控制选择器的开关和选择器点击要素的事件)。OpenLayers提供了一个ol.inherits来继承原型链,所以将CustomToolbarControl加入其中。

以修改之前配置的武汉市线数据源为例,进行属性字段的修改。这里介绍一下思路,首先通过点击编辑要素按钮打开编辑要素的“开关”,点击选中某个要修改的要素,弹出popup对话框,在对话框中会显示各个属性字段的值,用户可以修改其中的字段,在确认无误后点击“确认修改”按钮,这样就能够同步到服务器进行值的更新。

这里将gid为“metro_wh_outline.8”的线要素的对应属性字段id值改为99,点击“确定修改”按钮(图6-10)。

图6-10 修改数据内容

修改后刷新浏览器,再次点击对应的线要素,发现值已经修改为99,并且打开数据库查看对应的值,确实是得到了更新(图6-11)。

图6-11 成功修改属性值

点击了“编辑要素”按钮后,按钮的背景颜色会变为红色,这时候选择器的“开关”被打开,接着点击图上的某个要素时,会弹出要素的属性字段,用户在修改相应字段后点击“确定修改”,即可完成修改操作。

说明:用户可以在GeoServer的管理器中,点击“图层”→“图层名称”(图6-12),在最下方可以看到要素的属性字段的值(图6-13)。

图6-12 选择要查看的图层

图6-13 查看属性值

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈