7、添加billboard小旗子

news2024/11/15 5:53:46

        本节演示添加billboard小旗子,使用第四节click的例子,通过鼠标点击地图添加billboard添加小旗子。

1、修改鼠标点击事件mouseUp,在函数中创建BillboardCollection对象并添加到地图中。鼠标点击时获取鼠标位置,转换成经纬度然后添加billboard。

static void mouseUp(void *handler, Cesium::ScreenEvent *event) {
    Handler *aggregator = (Handler *) handler;

    if (aggregator->billboards == NULL) {
        // 创建BillboardCollection
        aggregator->billboards = new Cesium::BillboardCollection(NULL);
        aggregator->viewer->_scene->primitives()->add(aggregator->billboards);
    }
    glm::dvec2 position = event->position;//鼠标屏幕位置
    glm::dvec3 coor, carthposition;
    //转换成经纬度,与cesium基本一致
    aggregator->viewer->_scene->_camera->pickEllipsoid(position,
                                                       aggregator->viewer->_scene->_globe->_ellipsoid,
                                                       &coor);
    aggregator->viewer->_scene->_globe->_ellipsoid->cartesianToCartographic(coor, &carthposition);
    double longitude = Cesium::CesiumMath::toDegrees(carthposition.x);
    double latitude = Cesium::CesiumMath::toDegrees(carthposition.y);
    //添加billboard
    glm::dvec3 initialPosition2 = Cesium::Cartesian3::fromDegrees(longitude, latitude);
    aggregator->billboards->add(initialPosition2, "../data/home.png");

}

2、运行地图,点击地图即可添加一个billboard。

完整代码

/**
 * Created by IBM on 2021/3/3.
 */
#include <iostream>
#include <Widgets/Viewer/Viewer.h>
#include <Scene/BillboardCollection.h>


class Handler {
public:
    Cesium::Viewer *viewer;
    Cesium::BillboardCollection *billboards = NULL;

    /**
     * 鼠标抬起事件
     * @param type
     * @param position
     */
    static void mouseUp(void *handler, Cesium::ScreenEvent *event) {
        Handler *aggregator = (Handler *) handler;

        if (aggregator->billboards == NULL) {
            // 创建BillboardCollection
            aggregator->billboards = new Cesium::BillboardCollection(NULL);
            aggregator->viewer->_scene->primitives()->add(aggregator->billboards);
        }
        glm::dvec2 position = event->position;//鼠标屏幕位置
        glm::dvec3 coor, carthposition;
        //转换成经纬度,与cesium基本一致
        aggregator->viewer->_scene->_camera->pickEllipsoid(position,
                                                           aggregator->viewer->_scene->_globe->_ellipsoid,
                                                           &coor);
        aggregator->viewer->_scene->_globe->_ellipsoid->cartesianToCartographic(coor, &carthposition);
        double longitude = Cesium::CesiumMath::toDegrees(carthposition.x);
        double latitude = Cesium::CesiumMath::toDegrees(carthposition.y);
        //添加billboard
        glm::dvec3 initialPosition2 = Cesium::Cartesian3::fromDegrees(longitude, latitude);
        aggregator->billboards->add(initialPosition2, "../data/home.png");

    }
};

int main(int argc, char *argv[]) {
    Handler *handler = new Handler();
    Cesium::Viewer viewer = Cesium::Viewer(500, 300);
    handler->viewer = &viewer;
    std::string url = "https://dev.virtualearth.net";
    std::string key = "AmXdbd8UeUJtaRSn7yVwyXgQlBBUqliLbHpgn2c76DfuHwAXfRrgS5qwfHU6Rhm8";
    Cesium::BingMapsImageryProvider *imageryProvider1 = new Cesium::BingMapsImageryProvider(url, key);
    viewer.imageryLayers()->addImageryProvider(imageryProvider1);
    //创建事件
    Cesium::ScreenSpaceEventHandler *_eventHandler = new Cesium::ScreenSpaceEventHandler(handler);
    _eventHandler->setInputAction(&Handler::mouseUp, Cesium::ScreenSpaceEventType::LEFT_CLICK);//设置鼠标点击事件
    viewer.startAnimating(true);//启动opengl循环
    system("pause");
    return 0;
}

返回目录 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)

目录 Mycat分片技术_水平拆分-分表 Mycat分片技术_ER表 Mycat分片技术_全局表 Mycat分片技术_水平拆分-分表 前言 上面谈到垂直切分只是把表按模块划分到不同数据库&#xff0c;但没有解决单表大数据量的问题。 水平拆分 相对于垂直拆分&#xff0c;水平拆分不是将表做分…

宝塔 安装/使用Apollo(阿波罗)多环境部署-图文小白教程

官方安装教程手册&#xff1a;Apollo apollo&#xff08;阿波罗&#xff09;是一款可靠的分布式配置管理中心&#xff0c;诞生于携程框架研发部&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的…

Android 视频直播提拉流 嵌入式硬件 流媒体开发详细内容

1 Linux 系统编程网络编程基础 2 Linux 网络编程流媒体服务器&#xff0c;客户端开发实践 3 Android流媒体客户端 FFmpeg OpenGL ES 开发实践 4 Android H.264 AAC 封装mp4开发实战 5 流媒体开发实战之Rtmp推流 6 流媒体开发实战之RTSP推流 7 流媒体开发实战之UDP 8 P2P点对点项…

BERT 论文精读与理解

1.论文题目 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 2.论文摘要 本文引入了一种名为 BERT 的新语言表示模型&#xff0c;它代表 Transformers 的双向编码器表示。与最近的语言表示模型&#xff08;Peters et al., 2018a&#xf…

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么&#xff1f; 2.为什么需要docker&#xff1f; 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images&#xff08;镜像&#xff09; Cont…

数据库基本操作及表的创建

目录标题 1.数据库基本操作创建数据库查询数据库使用数据库查询默认数据库编码方式查询默认数据库校验规则删除数据 2.表的基本操作创建一个包含所有类型的表 1.数据库基本操作 创建数据库 查询数据库 使用数据库 查询默认数据库编码方式 查询默认数据库校验规则 删除数据 2.表…

内存的五大分区

一些套话 一个由C/C编译的程序占用的内存分为以下几个部分&#xff1a;栈区&#xff0c;堆区&#xff0c;全局区&#xff08;静态区&#xff09;&#xff0c;文字常量区&#xff0c;代码区 在执行一个C/C 程序时&#xff0c;此程序拥有唯一的“内存四区”&#xff08;栈区&…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第二章:采集DHT11数据上传服务器;接收服务器指令执行对应操作】

第一章链接 第二章开发环境 主控STM32F103C8T6WIFI模块ESP01S传感器模块DHT11温湿度传感器、LED灯开发语言C开发编译器KEIL组网方式WIFI服务器协议MQTT 本章要点 根据DHT11工作特性编写触发代码AT指令订阅服务器端口STM32中断接收挂起Usart协议信息标志位STM23任务过滤识别服…

102、基于STM32的智能投食智能鱼缸鱼塘养殖宠物喂食换水监控系统(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

路径规划算法:基于闪电连接过程优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于闪电连接过程优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于闪电连接过程优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用…

知乎下线“匿名功能” :「谢邀,匿了」成为千古绝唱

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 就在6月底“亿欧网黄渊普实名举报知乎CEO周源”这件事引起了轩然大波&#xff0c;核心文章直指知乎的匿名功能。没想到7月初这么快知乎就下线了匿名功能。 昨天&#xff0c;知乎宣布将下线匿名功能…

【数据结构二叉树OJ系列】1、二叉树的前序遍历

目录 题述(力扣难度&#xff1a;中等)&#xff1a; 思路: 正确代码如下&#xff1a; 典型错误&#xff1a; 题述(力扣难度&#xff1a;中等)&#xff1a; 给你二叉树的根节点 root&#xff0c;返回它节点值的 前序 遍历 示例1&#xff1a; 示例2&#xff1a; 输入&#xff1…

HappyDet安装使用教程

作者&#xff1a;堆堆星 导读 一般的深度学习流程包括数据采集&#xff0c;数据标注&#xff0c;训练&#xff0c;调参&#xff0c;测试&#xff0c;部署。流程繁琐&#xff0c;且周期极长。HappyDet以深度学习中目标检测算法为核心&#xff0c;开发了一套本地的全流程目标检测…

Blender基础入门(0):下载和资源

文章目录 我个人的Blender专栏前言相关资料Blender和C4D如何选择视频资源BlenderBlender官网下载基础设置常用快捷键介绍空格键&#xff1a;跳出选择框ShiftA&#xff1a;跳出添加框选中物体按F9:显示物体属性 Blender能做到什么总结 我个人的Blender专栏 Blender简单教学 前…

9.30UEC++ 注册执行指令

1. 只能在GameMode或者PlayController中使用 创建一个函数,在函数前定义宏&#xff0c;专门为下一行函数使用&#xff08;指令框宏&#xff09; 2.定义函数 书写功能逻辑&#xff1a;打印日志 3.操作演示: 编译之后&#xff0c;运行客户端&#xff0c;按下~键&#xff0c;输…

网络编程—Socket套接字详解

目录 一、网络编程 1.1、为什么需要网络编程&#xff1f; 1.2、什么是网络编程 1.3、发送端和接收端 ​编辑1.4、请求和响应 ​编辑1.5、客户端和服务端 二、Socket套接字 2.1、概念 2.2、分类 2.2.1、流套接字 2.2.2、数据报套接字 2.2.3、原始套接字 2.3、…

面向对象编程主线五

面向对象编程 五、第五阶段–多态性 5.1、理解多态性 理解多态性&#xff1a;可以理解为一个事物的多种形态&#xff1b; 何为多态性&#xff1a; 对象的多态性&#xff1a;父类的引用指向子类的对象&#xff08;或子类的对象赋给父类的引用&#xff09; 多态的使用&#x…

味尚食品 味尚拉面半干面是一种非常经典的中式面食

尊敬的客户&#xff0c;您好&#xff01;感谢您对我们电商平台的关注&#xff0c;我们很高兴为您介绍我们平台上的一款热销产品——味尚拉面半干面。 味尚拉面半干面是一种非常经典的中式面食&#xff0c;其主要特点体现在面条的口感和味道方面&#xff0c;让人感觉仿佛在享受正…

infinigen安装教程

至于infinigen是什么&#xff0c;网上很多&#xff0c;这篇文章主要是我安装的记录 官网&#xff1a;https://infinigen.org/ github&#xff1a;https://github.com/princeton-vl/infinigen 安装 首先要配置wsl环境&#xff0c;如何配置wsl&#xff0c;可以关注公众号“科…

依次判断数组中的各元素是否以指定后缀作为结尾numpy.char.endswith()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 依次判断数组中的各元素 是否以指定后缀作为结尾 numpy.char.endswith() [太阳]选择题 下列代码最后输出的结果是&#xff1f; import numpy as np s np.array([teacher, student]) print(&…