cesium点位加载+坐标转化+场景应用+动态更新+高亮显示

cesium 点位应用

以下是一个使用Cesium实现点位加载、点位高亮以及坐标转换的示例代码。假设你已经引入了Cesium库。

1. 点位加载与高亮

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cesium Points Example</title>
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.101/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.101/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
    <style>
        html,
        body,
        #cesiumContainer {
     
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <div id="cesiumContainer"></div>
    <script>
        // 初始化Cesium Viewer
        var viewer = new Cesium.Viewer('cesiumContainer');

        // 定义点数据
        var points = [
            {
      longitude: -75.59777, latitude: 40.03883, height: 1000, name: 'Point 1' },
            {
      longitude: -75.60777, latitude: 40.04883, height: 1500, name: 'Point 2' }
        ];

        // 创建点实体并添加到场景
        var pointEntities = [];
        points.forEach(function (point) {
     
            var entity = viewer.entities.add({
     
                position: Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.height),
                point: {
     
                    pixelSize: 10,
                    color: Cesium.Color.RED,
                    outlineColor: Cesium.Color.WHITE,
                    outlineWidth: 2
                },
                label: {
     
                    text: point.name,
                    font: '14px sans-serif',
                    style: Cesium.LabelStyle.FILL_AND_OUTLINE,
                    fillColor: Cesium.Color.WHITE,
                    outlineColor: Cesium.Color.BLACK,
                    verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                    horizontalOrigin: Cesium.HorizontalOrigin.CENTER
                }
            });
            pointEntities.push(entity);
        });

        // 鼠标悬停高亮效果
        viewer.scene.preRender.addEventListener(function () {
     
            var picked = viewer.scene.pick(viewer.camera.getPickRay(viewer.canvas.getBoundingClientRect()));
            if (Cesium.defined(picked) && picked.id instanceof Cesium.Entity) {
     
                picked.id.point.color = Cesium.Color.YELLOW;
            } else {
     
                pointEntities.forEach(function (entity) {
     
                    entity.point.color = Cesium.Color.RED;
                });
            }
        });
    </script>
</body>

</html>

2. 坐标转换

Cesium提供了多种坐标系统之间的转换方法,常见的有经纬度(地理坐标)与笛卡尔坐标之间的转换。以下是一个简单的示例:

// 经纬度转笛卡尔坐标
var longitude = -75.59777;
var latitude = 40.03883;
var height = 1000;
var cartesian = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);

// 笛卡尔坐标转经纬度
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var newLongitude = Cesium.Math.toDegrees(cartographic.longitude);
var newLatitude = Cesium.Math.toDegrees(cartographic.latitude);
var newHeight = cartographic.height;

console.log('经纬度转笛卡尔坐标:', cartesian);
console.log('笛卡尔坐标转经纬度:', newLongitude, newLatitude, newHeight);

在上述代码中:

  • 点位加载:通过viewer.entities.add方法创建点实体,并设置其位置、样式和标签。
  • 点位高亮:利用viewer.scene.preRender事件监听鼠标悬停,判断是否选中点实体并改变其颜色。
  • 坐标转换:使用Cesium.Cartesian3.fromDegrees将经纬度和高度转换为笛卡尔坐标,使用Cesium.Cartographic.fromCartesian将笛卡尔坐标转换为经纬度。

请根据你的实际需求调整代码。

cesium 经纬度转屏幕坐标 以及 屏幕坐标应用

  1. 经纬度坐标转屏幕坐标
    在Cesium中,可以使用viewer.scene.globe.project方法将经纬度坐标(Cartographic)转换为屏幕坐标(Cartesian2)。以下是一个示例代码,展示如何将经纬度坐标转换为屏幕坐标:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport"</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值