美文网首页开源GIS相关
1,通过sqlview动态发布地图图层

1,通过sqlview动态发布地图图层

作者: 桃子味的白开水 | 来源:发表于2019-12-13 16:58 被阅读0次

1.SQL Views简介

Geoserver+postgresql+openlayers(leaflet)是目前主流的gis开发工具。Postgresql用于存储地图数据,geoserver用于发布地图数据,openlayers或者leaflet用于访问发布地图。正常情况下当shapefile格式的数据导入postgresql数据库中之后,我们需要通过geoserver把所有的数据发布出去,这样才能访问。常规情况下这种操作方式是没有问题的,因为地图作为基础服务,一旦发布出去是不会变化的。而在项目实际使用中,可能需要将数据库表中的部分数据作为图层发布,也可能从前端动态传入参数进行过滤后发布。此时就用到了SQL Views.

首先介绍一下sql View,通过SQLViews可以做如下事情:

(1)数据库view可以在geoserver中当作表完全一样的发布,而geoserver的SQLViews不仅能实现简单的查询发布,还能输入参数作为查询视图的条件。

(2)SQLViews可以发布数据库的存储过程或者function,执行更加复杂的逻辑操作与查询。

(3)SQL Views查询可以通过字符串替换的方式进行参数化,参数值可以在wms和wfs请求总使用,输入值可以通过设置的正则表达式进行验证从而消除SQL 注入攻击的风险。

(4)SQLViews是对数据库操作与查询的一个结果,不能使用wfs_t去操作它,但是wfs,wms都可以正常请求或者查询。

2.创建带查询条件的SQL Views视图:

(1)登录geoserver,点击图层,选择工作空间,新建图层。

(2)新建SQL Views视图图层,并发布。

image image

这里创建了一个视图,写入sql语句,可以用两个%来包含参数,tbname的默认值设置为数据库中一直会存在的表格,设置的正则表达式为只允许输入字母数字和下划线.

在属性中对空间字段的类型和坐标系做一下设置。

3.使用OpenLayers调用wms服务

var params = {

        FORMAT: "image/png",

        LAYERS: "SCGS:testview"

      };

      var viewparams=["tbname:'mti_road_rtts'"];

      params.viewparams=viewparams;

      var imgLy = new Image({

        source: new ImageWMS({     

          url: "http://10.168.4.246:8080/geoserver/SCGS/wms",

          params: params,

          serverType:'geoserver'

        })

      });

      this.map.addLayer(imgLy);

该viewparams参数是列表key:value对,用分号隔开:

viewparams=p1:v1;p2:v2;...

如果值包含分号或逗号,则必须使用反斜杠进行转义(例如,,和;)。

image

SqlView的真正作用还是体现在灵活的多表查询上面

SQL视图是只读的

相关文章

网友评论

    本文标题:1,通过sqlview动态发布地图图层

    本文链接:https://www.haomeiwen.com/subject/gxtxnqtx.html