当前位置: 首页 > news >正文

Cesium 空间量算——生成点位坐标

文章目录

    • 需求
    • 分析
      • 1. 点击坐标点实现
      • 2. 输入坐标实现

需求

用 Cesium 生成点位坐标,并明显标识

分析

以下是我的两种实现方式
第一种是坐标点击实现
第二种是输入坐标实现

1. 点击坐标点实现

在这里插入图片描述

//点位坐标
 getLocation() {
          this.hoverIndex = 0;
          let that = this;
          this.viewer.screenSpaceEventHandler.setInputAction(function(movement) {
              var position = viewer.scene.pickPosition(movement.position);
              var cartographicPos = Cesium.Cartographic.fromCartesian(position);
              var lonDegree = Cesium.Math.toDegrees(cartographicPos.longitude);
              var latDegree = Cesium.Math.toDegrees(cartographicPos.latitude);
              var text = "经度:" + lonDegree.toFixed(6);
              text += "\n纬度:";
              text += latDegree.toFixed(6);
              text += "\n高度:";
              text += cartographicPos.height.toFixed(2);
              text += "米";
              var labelEntity = viewer.entities.add({
                  position: Cesium.Cartesian3.clone(position),
                  billboard: {
                      position: Cesium.Cartesian3.clone(position),
                      verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                      image: "/static/images/spaceComputed/menu_icon_lv1_1_trenddraw.png",
                  },
                  label: {
                      text: text,
                      font: "18px sans-serif",
                      horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
                      verticalOrigin: Cesium.VerticalOrigin.BASELINE,
                      style: Cesium.LabelStyle.FILL_AND_OUTLINE,
                      fillColor: Cesium.Color.WHITE,
                      outlineColor: Cesium.Color.RED,
                      outlineWidth: 1.0,
                      heightReference: Cesium.HeightReference.NONE,
                      pixelOffset: new Cesium.Cartesian2(18.0, -18)
                  },
              });
              that.pointLocationLabels.push(labelEntity);
          }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
      },

2. 输入坐标实现

以下是一个简单的 Cesium 输入生成点位坐标的demo,包含了一个用于输入经纬度和高度的表单和一个用于显示地图的div容器:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cesium Demo</title>
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.82/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.82/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
    <style>
        #cesiumContainer {
            width: 800px;
            height: 500px;
            margin: 10px auto;
        }
        
        form {
            width: 800px;
            margin: 10px auto;
            text-align: center;
        }
        
        input[type="text"], input[type="number"] {
            width: 100px;
            margin-right: 10px;
        }
        
        input[type="submit"] {
            padding: 5px 10px;
            background-color: #4CAF50;
            color: #fff;
            border: none;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="cesiumContainer"></div>
    <form method="post">
        经度:<input type="text" name="lon" id="lon">
        纬度:<input type="text" name="lat" id="lat">
        高度:<input type="number" name="height" id="height">
        <input type="submit" value="生成点位">
    </form>
    <script>
        var viewer = new Cesium.Viewer('cesiumContainer');
        var entity;

        function addPoint(lon, lat, height) {
            if (entity) {
                viewer.entities.remove(entity);
            }
            entity = viewer.entities.add({
                name: 'Point',
                position: Cesium.Cartesian3.fromDegrees(lon, lat, height),
                point: {
                    pixelSize: 10,
                    color: Cesium.Color.YELLOW
                }
            });
            viewer.zoomTo(entity);
        }

        document.querySelector('form').addEventListener('submit', function (event) {
            event.preventDefault();
            var lon = parseFloat(document.querySelector('#lon').value);
            var lat = parseFloat(document.querySelector('#lat').value);
            var height = parseFloat(document.querySelector('#height').value) || 0;
            addPoint(lon, lat, height);
        });
    </script>
</body>
</html>

在上述代码中,我们创建了一个用于输入经纬度和高度的表单和一个用于显示地图的div容器,通过Cesium.Viewer对象实现了创建地图的功能。当用户填写表单并提交时,我们调用addPoint函数生成点位坐标,并将地图缩放到包含点位的视野范围内。

相关文章:

  • 2023常用的原型设计软件推荐
  • 【无标题】
  • SecureCRT SSH与FTP连接中文乱码
  • C#流Stream与IO详解(4)——如何更快的读写文件
  • IP风险查询:抵御DDoS攻击和CC攻击的关键一步
  • 05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别
  • 前端框架vBean admin
  • Eclipse工具使用技巧
  • Golang编写自定义IP限流中间件
  • Ubuntu安装Android Studio
  • C语言基础知识点(八)联合体和大小端模式
  • 机器学习中分类问题的初步
  • MongoDB——将时间戳转换为日期
  • 学习Nano编辑器:入门指南、安装步骤、基本操作和高级功能
  • 【AWS】AI 代码生成器—Amazon CodeWhisperer初体验 | 开启开挂编程之旅
  • C/C++/Python图像处理算法实战【3】彩色图像灰度化和二值化处理
  • CTF —— 网络安全大赛(这不比王者好玩吗?)
  • 【深度学习】卷积神经网络(LeNet)【文章重新修改中】
  • 2023年腾讯云轻量服务器测评:16核 32G 28M 配置CPU测试
  • electron build 打包时,背景图片失败,background-image: url 被转换成app:///img/
  • 海南公布知识产权保护典型案例,一企业违规申请注册“中华”商标被处罚
  • 周继红连任中国跳水协会主席
  • 元宇宙之问|“AI+AR”融合或重新定义元宇宙发展路径
  • 男子为讨喜钱掰断劳斯莱斯小金人,警方:已介入处置
  • 林毅夫:中美经济确有脱钩风险,但“完全脱钩”可能性不大
  • 针对“二选一”,美团再次辟谣