SuperMap iPortal实现场景图表联动

前言

SuperMap iPortal(下文简称iPortal)地图大屏中场景组件没有设置交互事件的接口,那边我想要实现场景与其他组件的联动要怎么做呢?下文以场景图表联动为例,告诉你应该怎么做.

一、新建大屏并在场景中添加场景和图表组件.

这一步比较简单,在左侧的组件栏中拉出对应的组件,拖拽到合适的位置即可.这里就不过多解释,直接贴结果图:
在这里插入图片描述

二、给需要设置交互的图表添加数据并设置样式
  1. 选中图表,并在右侧属性栏中添加数据(需要注意的是这个地方添加的数据需要和与之交互的模型属性数据一致.)
    在这里插入图片描述
  2. 在数据一栏设置显示的字段并在图表内容中给图表设置图表样式,结果如下图:
    在这里插入图片描述
三、低代码编辑器添加依赖和相关代码
  1. 低代码编辑器中添加jquery的js库.
    在这里插入图片描述
  2. 在JavaScript中添加对应的业务代码.
    在这里插入图片描述
    具体代码如下:
let resultData // 用于接受sql返回的结果数组
// 设置图表的高亮颜色
var option = $Chart_18.getOption();
option.series[0].itemStyle.emphasis.color = "#EA7568"
$Chart_18.setOption(option)
// 得到选中的图表的id高亮对象
$Chart_18.on('click', (e) => {
    let sqlStr = `size =  ${e.value}`
    doSqlQuery(sqlStr)
});

// 得到选中对象id并高亮图表
$WebScene_1.viewer.selectedEntityChanged.addEventListener(function (e) {
    let sqlStr = `SMID =  ${e.id}`
    doSqlQuery(sqlStr)
})
// 做sql查询得到相应的值对象
function doSqlQuery(sqlStr) {

    var sqlParameter = {
        "datasetNames": ["DataSource:NewTabular"],
        getFeatureMode: "SQL",
        queryParameter: {
            attributeFilter: sqlStr
        }
    };
    var url = "http://172.16.15.203:8090/iserver/services/data-sceneAndCharts/rest/data/featureResults.rjson?returnContent=true";
    var queryData = JSON.stringify(sqlParameter);

    $.ajax({
        type: "post",
        url: url,
        data: queryData,
        success: function (result) {
            resultData = JSON.parse(result);
            console.log(resultData.features[0]);
            onQueryComplete(resultData.features[0])
        },
        error: function (msg) {
            console.log(msg);
        },
    })
}

function onQueryComplete(features) { // sql 查询成功回调
    // features.fieldValues 结果的值数组 例如:  ["8", "8", "保护区8", "107"]
    // 获得id将场景中的对应模型高亮
    let layer = $WebScene_1.viewer.scene.layers.find("GreenArea@OlympicGreenSpaceForFan")
    // 234,117,104
    layer.selectedColor = new Cesium.Color(234 / 255, 117 / 255, 104 / 255, 1)
    layer.setSelection([features.fieldValues[0]])

    // 选中并高亮对应的图表项
    // 获取对应的dataIndax
    let dataIndex
    for (let i in $Chart_18._chartsMap) {
        dataIndex = $Chart_18._chartsMap[i]._data._idList.indexOf(features.fieldValues[2])
    }
    console.log("dataIndex", dataIndex);
    // 取消其他项的高亮
    for (let i = 0; i <= 18; i++) {
        $Chart_18.dispatchAction({
            type: "downplay",
            seriesIndex: 0,
            dataIndex: i,
        });
    }
    // 高亮当前选中项
    $Chart_18.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: dataIndex,
    });
}

点击快速运行保存之后即可完成场景图表联动的功能.效果如下:

场景图表联动

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SuperMap是一款专业的GIS软件,而Cesium是一个开源的WebGL地球仪库,两者结合可以实现很多GIS应用,包括聚合效果。 要实现聚合效果,首先需要获取要聚合的点的位置信息,并将其转换成Cesium的Entity对象。然后,可以使用Cesium的Cluster绘制器,将这些Entity对象聚合成一个新的Entity对象,作为聚合后的点。聚合器可以根据需要配置,调整聚合的距离、样式等参数。 以下是一个简单的示例代码,演示如何使用SuperMap和Cesium实现聚合效果: ```javascript // 初始化SuperMap地图 var map = new SuperMap.Map("mapDiv"); var layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", "http://localhost:8090/iserver/services/map-World/rest/maps/World"); map.addLayer(layer); map.zoomToMaxExtent(); // 获取要聚合的点的位置信息 var markers = [ {lon: 116.397128, lat: 39.916527}, {lon: 116.407128, lat: 39.926527}, {lon: 116.417128, lat: 39.936527}, // ... ]; // 将点转换成Cesium的Entity对象 var entities = markers.map(function(marker) { return new Cesium.Entity({ position: Cesium.Cartesian3.fromDegrees(marker.lon, marker.lat), // 其他属性,如名称、图标等 }); }); // 创建聚合器 var cluster = new Cesium.Cluster({ pixelRange: 50, // 聚合距离 minimumClusterSize: 3, // 最小聚合数量 enabled: true, // 是否启用聚合 // 聚合点的样式 clusterBillboard: new Cesium.BillboardGraphics({ image: 'img/cluster.png', horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.CENTER }) }); // 将点添加到聚合器中 cluster.add(entities); // 将聚合后的点添加到Cesium场景中 var viewer = new Cesium.Viewer('cesiumContainer'); viewer.scene.primitives.add(cluster.getPrimitive()); ``` 上述代码中,首先初始化了一个SuperMap地图,并获取了要聚合的点的位置信息。然后,将这些点转换成Cesium的Entity对象,并使用Cluster绘制器将它们聚合成一个新的Entity对象。最后,将聚合后的点添加到Cesium场景中显示出来。 需要注意的是,上述代码中的示例仅供参考,实际应用中需要根据具体需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值