• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Sqlview动态发布地图图层的方法

    1.SQL Views简介

    Geoserver+postgresql+openlayers(leaflet)是目前主流的gis开发工具。Postgresql用于存储地图数据,geoserver用于发布地图数据,openlayers或者leaflet用于访问发布地图。正常情况下当shapefile格式的数据导入postgresql数据库中之后,我们需要通过geoserver把所有的数据发布出去,这样才能访问。常规情况下这种操作方式是没有问题的,因为地图作为基础服务,一旦发布出去是不会变化的。但是对于室内地图来说就不行了,假如一个商场有5层,每一楼层又层有5个地图图层,对于这样一个商场需要把这25个地图图层在geoserver中全部发布出来才能访问该商场的全部地图。假如发布这一个商场的25个图层你还能忍受的话,那发布成千上万个商场的地图你还能忍受吗?既然忍受不了那就要想办法解决。由于发布地图是机械的重复的工作,我们是否能想一些办法来帮我们完成这些工作呢。这时候就是我们的sqlView出场了。

    首先介绍一下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视图图层,并发布。


    这里创建了一个视图,发布传入的表名数据。

    tbl的默认值设置为数据库中一直会存在的表格,设置的正则表达式为只允许输入字母数字和下划线。


    在属性值对输出结果的类型和坐标系做了设置。

    (3)图层访问

    在通过wms获取地图的时候只需要把tbl的值通过viewparams传递过去就行了

    http://10.20.135.14/geoserver/parking/wms?SERVICE=WMSVERSION=1.3.0REQUEST=GetMapFORMAT=image%2FpngTRANSPARENT=trueLAYERS=parking%3AvTingcheweiCRS=EPSG%3A4326STYLES=WIDTH=2700HEIGHT=1200BBOX=20.02708134918213%2C110.33805803565978%2C20.03351865081787%2C110.3525419643402viewparams=tbl%3Awanghaiguojia_b2_tingchewei

    viewparams格式一般是viewparams=p1:v1;p2:v2;…可以加若干个参数。不同参数之间以;隔开,单个参数是键值对,即p1是参数名称,v1是参数值。

    通过wms方式访问发布的视图方法为:

    var params = {
    LAYERS:'parking:vTingchewei',
    FORMAT:'image/png'
    };
    varviewparams = [
    'tbl:wanghaiguojia_b2_tingchewei'
    ];
    params.viewparams= viewparams;
    varvTingchewei = new ol.layer.Image({
    source:new ol.source.ImageWMS({
    url:'http://10.20.135.14/geoserver/parking/wms', 
    params:params,
    serverType:'geoserver',
    })
    });

    通过这种方式,再多的商场只需要在geoserver中发布5次视图即可,而且该发布视图的代码可以预先写入geoserver中打包进去。这样该系统在任何商场使用都不需要发布地图了。

    3.创建包含function的SQL View视图

    解决了图层发布的问题,终于可以松一口气了。但是,没想到棘手的问题还在后面。领导让做室内导航功能。做就做吧,谁让咱是苦逼的码农呢。那该怎么做室内导航呢,做这个功能之前,咱还是要规划一下的。首先要写最短路径查询算法;然后查询路径的时候只需要把起点和终点的位置输入算法查询即可;最后把查询的结果通过wms或wfs方式获取,显示在地图上。

    编写最短路径规划算法的时候我们需要的输入有:用户所在楼层的道路名,起点和终点的位置,然后我们吭哧吭哧,大战3天三夜,搞定。

    接着查询,好办,直接按照上面的放吧,把该商场的5个楼层都发布一个基于对应楼层的结果路径视图,机智吧?NO,NO,NO!简直遇事情不懂脑子啊。这个时候肯定需要换一个新的方法,把最短路径规划算法写成一个Function嵌入到postgresql数据库中,该function的输入参数为:用户所在楼层,起点位置,终点位置;输出参数为起点和终点直接经过的点坐标。

    最后,通过wms或者wfs的方式获取得到的最短路径结果即可。

    以上所述实现小编给大家介绍的Sqlview动态发布地图图层的方法,希望对大家有所帮助!

    上一篇:SQL SERVER 将XML变量转为JSON文本
    下一篇:SQL Server存储过程中编写事务处理的方法小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Sqlview动态发布地图图层的方法 Sqlview,动态,发布,地图,图层,