Cesium 给点添加单击事件

遇到的问题:
使用Cesium.PointPrimitiveCollection 添加的点怎么给每一个点添加单击事件的?

let pointPrimitives = _this.viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection())
      let data = [
        {x: 120.296589, y: 30.263504},
        {x: 120.296589, y: 30.261984},
        {x: 120.296589, y: 30.259051},
        {x: 120.296589, y: 30.257086},
        {x: 120.296589, y: 30.254216},
        {x: 120.296589, y: 30.250878},
        {x: 120.296589, y: 30.24988},
        {x: 120.296589, y: 30.248819},
        {x: 120.296589, y: 30.247883},
        {x: 120.296589, y: 30.245855},
        {x: 120.296589, y: 30.244311},
        {x: 120.296589, y: 30.241345},
        {x: 120.296589, y: 30.239943},
        {x: 120.296589, y: 30.238445},
        {x: 120.296589, y: 30.236745}
      ]
      data.map(item => {
        let position = Cesium.Cartesian3.fromDegrees(item.x, item.y, 0) // 这里的 50 是高度
        pointPrimitives.add({
          pixelSize: 4,
          color: Cesium.Color.RED,
          outlineColor: Cesium.Color.RED,
          outlineWidth: 0,
          position: position
        })
      })

在这里插入图片描述
解决方法:
如果有同样问题的 可以使用这种方法:

`const handler = new this.cesium.ScreenSpaceEventHandler(viewer.scene.canvas)

handler.setInputAction(function (click) {
    var pick = viewer.scene.pick(click.position)
    console.log(pick)
    if (pick && pick.id) {
      if (pick.id._id === 'billboard') {
        if (_this.modelViewerShow === true) {
          _this.getModel()
          _this.modelViewerShow = false
          _this.$('.adsk-viewing-viewer').show()
          _this.$('#GISviewer').hide()
        }
      } else {
        console.log(pick.id)
      }
    }
  }, _this.cesium.ScreenSpaceEventType.LEFT_CLICK)`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cesium 是一个基于 Web 技术的开源三维地图引擎,可用于创建令人印象深刻的交互式地图应用程序。GeoJSON 则是一种基于 JavaScript 对象表示法(JSON)的地理数据交换格式。 要在 Cesium 中渲染 GeoJSON 并为其添加点击事件,需要进行以下步骤: 1. 加载 GeoJSON 数据 可以使用 Cesium 的 GeoJSONDataSource 对象加载 GeoJSON 数据,例如: ```javascript var dataSource = new Cesium.GeoJSONDataSource(); dataSource.load('path/to/yourfile.geojson', { stroke: Cesium.Color.HOTPINK, fill: Cesium.Color.PINK, strokeWidth: 3, markerSize: 10 }); viewer.dataSources.add(dataSource); ``` 这将加载 GeoJSON 数据并以热粉色和粉色渲染边界和填充。您可以用自己的样式替换这些属性。 2. 添加点击事件 要在 GeoJSON 上添加点击事件,可以使用 pick 函数遍历场景中的实体,并将鼠标交互绑定到一个特定的实现函数。例如: ```javascript var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); handler.setInputAction(function (click) { var pickedObject = viewer.scene.pick(click.position); if (Cesium.defined(pickedObject)) { console.log(pickedObject.id); // 打印选中的实体的 ID } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); ``` 此代码将捕获到场景中的左单击事件,并使用场景 pick 函数提取被选中的实体。您可以使用 pickedObject.id 访问实体的属性,如名称和坐标。 综上所述,要在 Cesium 中渲染 GeoJSON 并添加点击事件,需要加载 GeoJSON 数据源并使用 pick 函数添加交互。这些步骤可以自定义以满足您的需求,例如添加更多的样式或交互性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值