SuperMap iClient for MapLibreGL 根据SQL条件过滤显示动态图层

news/2024/10/3 14:32:23 标签: sql, redis, 数据库

查阅发现iClient 有子图层控制类 LayerStatus
可实现:子图层显示参数类。此类存储了各个子图层的名称、是否可见的状态、SQL 过滤条件等参数。
API详情:http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/docs/maplibregl/LayerStatus.html
在这里插入图片描述

实现思路:

1、构造StatusParameters 参数数组

 let mymyLayerStatusList = [];
    //构造子图层显示参数
    myLayerStatusList.push(
      new maplibregl.supermap.LayerStatus({
        layerName: "Grids@World",
        displayFilter: "false", // 设置子图层显影
        // displayFilter: "smid = 0",
      })
    );

2、通过LayerInfoService创建临时图层

 //构造子图层显示控制参数
    let statusParameters = new maplibregl.supermap.SetLayerStatusParameters({
      myLayerStatusList: myLayerStatusList,
    });

    let layerInfoService = new maplibregl.supermap.LayerInfoService(url);
    //子图层显示控制服务。负责将子图层显示控制参数传递到服务端,并获取服务端返回的图层显示状态。
    layerInfoService.setLayerStatus(statusParameters, (res) => {})

3、根据layersID加载临时图层

 sources: {
              "raster-tiles": {
                attribution: "",
                type: "raster",
                // 拼接临时图层地址
                tiles: [
                  url + "/zxyTileImage.png?prjCoordSys=" + encodeURIComponent('{"epsgCode":3857}') +
                    "&z={z}&x={x}&y={y}&noWrap=true&transparent=true&cacheEnabled=false&layersID=" +
                    tempMapId,
                ],
                tileSize: 256,
              },

完整代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>根据SQL条件过滤显示动态图层</title>
    <link
      rel="stylesheet"
      href="https://iclient.supermap.io/web/libs/maplibre-gl-js/4.3.2/maplibre-gl.min.css"
    />
    <script src="https://iclient.supermap.io/web/libs/maplibre-gl-js/4.3.2/maplibre-gl.min.js"></script>
    <link
      rel="stylesheet"
      href="https://iclient.supermap.io/web/libs/maplibre-gl-js-enhance/4.3.0-1/maplibre-gl-enhance.css"
    />
    <script src="https://iclient.supermap.io/web/libs/maplibre-gl-js-enhance/4.3.0-1/maplibre-gl-enhance.js"></script>
    <script src="https://iclient.supermap.io/dist/maplibregl/iclient-maplibregl-es6.min.js"></script>
    <style>
      body {
        margin: 0;
        padding: 0;
      }

      #map {
        position: absolute;
        top: 0;
        bottom: 0;
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
  </body>
  <script>
    let url =
      "http://support.supermap.com.cn:8090/iserver/services/map-world/rest/maps/%E4%B8%96%E7%95%8C%E5%9C%B0%E5%9B%BE_Day";

    let mymyLayerStatusList = [];
    //构造子图层显示参数
    myLayerStatusList.push(
      new maplibregl.supermap.LayerStatus({
        layerName: "Grids@World",
        displayFilter: "false", // 设置子图层显影
        // displayFilter: "smid = 0",
      })
    );
    myLayerStatusList.push(
      new maplibregl.supermap.LayerStatus({
        layerName: "continent_T@World",
        displayFilter: "true", // 设置子图层显影
        displayFilter: "smid = 5",
      })
    );

    myLayerStatusList.push(
      new maplibregl.supermap.LayerStatus({
        layerName: "Countries@World",
        isVisible: "true", // 设置子图层显影
        displayFilter: "smid > 200",
      })
    );
    myLayerStatusList.push(
      new maplibregl.supermap.LayerStatus({
        layerName: "Countries@World#1",
        isVisible: "true", // 设置子图层显影
        displayFilter: "smid > 200",
      })
    );
    //构造子图层显示控制参数
    let statusParameters = new maplibregl.supermap.SetLayerStatusParameters({
      myLayerStatusList: myLayerStatusList,
    });

    let layerInfoService = new maplibregl.supermap.LayerInfoService(url);
    //子图层显示控制服务。负责将子图层显示控制参数传递到服务端,并获取服务端返回的图层显示状态。
    layerInfoService.setLayerStatus(statusParameters, (res) => {
      if (res.result) {
        //获取临时图层id
        let tempMapId = res.result.newResourceID;
        console.log(tempMapId);
        let map = new maplibregl.Map({
          container: "map",
          style: {
            version: 8,
            sources: {
              "raster-tiles": {
                attribution: "",
                type: "raster",
                // 拼接临时图层地址
                tiles: [
                  url +
                    "/zxyTileImage.png?prjCoordSys=" +
                    encodeURIComponent('{"epsgCode":3857}') +
                    "&z={z}&x={x}&y={y}&noWrap=true&transparent=true&cacheEnabled=false&layersID=" +
                    tempMapId,
                ],
                tileSize: 256,
              },
            },
            layers: [
              {
                id: "simple-tiles",
                type: "raster",
                source: "raster-tiles",
                minzoom: 0,
                maxzoom: 22,
              },
            ],
          },
          center: [100, 50],
          maxZoom: 18,
          zoom: 2,
        });
        map.addControl(new maplibregl.supermap.LogoControl(), "bottom-right");
        map.addControl(new maplibregl.NavigationControl(), "top-left");
      }
    });
  </script>
</html>

http://www.niftyadmin.cn/n/5688527.html

相关文章

c++ arrayfire库 矩阵分块

void af_test4() {af::array S af::randu(4, 4, c32); //4*4的complex float数组af_print(S);af::array S11 S(af::seq(2), af::seq(2)); // 左上分块af_print(S11);af::array S12 S(af::seq(2), af::seq(2, af::end)); // 右上分块af_print(S12);af::array S21 S(af::seq…

华为手机连接蓝牙音响后播放声音小的问题分析

当你的华为 P70Pro 手机通过蓝牙连接到音响后&#xff0c;虽然将手机音量调到最大&#xff0c;但音响播放的声音依然很小&#xff0c;背后可能存在多个技术因素和设定上的问题。要理解这一现象&#xff0c;我们可以从设备的音量控制机制、蓝牙协议的限制、音频编码与传输的影响…

计算机毕业设计 基于Python的无人超市管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

如何选择与运用编程工具提升工作效率的秘密武器

在当今这个信息爆炸、技术日新月异的时代&#xff0c;编程工具的选择对于开发者来说至关重要。一款合适的编程工具不仅能够简化代码编写&#xff0c;还能自动化任务&#xff0c;提升调试速度&#xff0c;甚至让团队协作更加顺畅。那么&#xff0c;哪款编程工具能让我们的工作效…

本人自定义的GO包说明【实用,建议收藏】

项目地址&#xff1a;https://gitee.com/zht639/my_gopkg 自定义的golang包&#xff0c;包含许多实用和方便的功能&#xff0c;以下是使用说明和包的介绍。注意&#xff1a;包可能会更新&#xff0c;具体请看上方链接 一、使用说明 1.本地调用 打开项目根目录&#xff0c;在…

关于 Latex 使用 BibTeX 进行参考文献管理的相关

关于 Latex 使用 BibTeX 进行参考文献管理, 可以参考下面的文章: 参考文献 使用 BibTeX 进行参考文献管理: https://www.castamerego.com/docs/Latex/Reference上面文章中提到了 \bibpunct{[}{]}{;}{s}{,}{,} % 第一&#xff0c;二个参数为括号样式&#xff0c;可以换成小括号…

深入Volatile

深入Volatile 1、变量不可见性&#xff1a; 1.1多线程下变量的不可见性 直接上代码 /*** author yourkin666* date 2024/08/12/16:12* description*/ public class h1 {public static void main(String[] args) {MyClass myClass new MyClass();myClass.start();while (tr…

容器适配器-stack、queue、priority_queue和仿函数

目录 1.什么是适配器 2.deque 1.简单了解结构 2.deque的缺陷 3.为什么选择deque作为stack和queue的底层默认容器 3.stack&#xff08;栈&#xff09; 4.queue&#xff08;队列&#xff09; 5.仿函数 6.priority_queue&#xff08;优先级队列&#xff09;&#xff08;堆…