gpt4 book ai didi

javascript - Cesium live update 的一个点?

转载 作者:行者123 更新时间:2023-11-27 23:36:59 29 4
gpt4 key购买 nike

我目前正在为 Cesium 开发实时跟踪应用程序,但在浏览器中显示该点时遇到了一些问题。

到目前为止,我的 Cesium 查看器从服务器接收数据(JSON 格式)并在 map 上正确显示该点,但让它更新 map 上的位置的唯一方法是刷新页面。请注意,它正在从中读取位置的 location.json 文件大约每秒更新一次来自服务器的新位置。

现在我认为它会这样做,因为客户端代码没有“更新”功能来动态更改 map 上的点位置。

那么让Cesium不断更新 map 上的点,而不需要用户不断刷新页面,最简单的方法是什么?根据我的研究,我发现了一些涉及流式传输 CZML 文件或将我的 JSON 转换为数据源的示例,但这些对于看似简单的任务来说似乎有点复杂。难道没有一个简单的“更新”功能,可以动态改变点吗?

这是我的客户端代码:

<!DOCTYPE html>
<html lang="en">
<head>
<!-- Use correct character set. -->
<meta charset="utf-8">
<!-- Tell IE to use the latest, best version (or Chrome Frame if pre-IE11). -->
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>Hello World!</title>
<script src="../Build/Cesium/Cesium.js"></script>
<style>
@import url(../Build/Cesium/Widgets/widgets.css);
html, body, #cesiumContainer {
width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>

<script>
var viewer = new Cesium.Viewer('cesiumContainer');

Cesium.loadJson('/location.json').then(function(data) {
console.log(data);
viewer.entities.add({
name : data.name,
position : Cesium.Cartesian3.fromDegrees(data.lon, data.lat),
point : {
pixelSize : 5,
color : Cesium.Color.RED,
outlineColor : Cesium.Color.WHITE,
outlineWidth : 2
},
label : {
text : data.name,
font : '14pt monospace',
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth : 2,
verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
pixelOffset : new Cesium.Cartesian2(0, -9)
}
});

viewer.zoomTo(viewer.entities);
});
</script>
</body>
</html>

如果您需要我提供更多信息,我很乐意提供。

谢谢!

最佳答案

您需要保留对每个点的引用,然后根据某个唯一 ID 简单地更新该元素的位置。如果名称是唯一的,那么您可以使用它,否则您需要实现某种方式来在更新后识别每个点。您可以通过调用 var currentPoint = viewer.entities.getById(data.id) 在 loadJSON 回调函数中检查该点是新点还是现有点。然后你可以选择你调用这些函数中的哪一个。第一个用于新点(当 currentpoint == undefined 时):

function addNewPoint(
var point = new Cesium.Entity(
{
id : data.id,
name : data.name,
position : Cesium.Cartesian3.fromDegrees(data.lon, data.lat),
point : {
pixelSize : 5,
color : Cesium.Color.RED,
outlineColor : Cesium.Color.WHITE,
outlineWidth : 2
},
label : {
text : data.name,
font : '14pt monospace',
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth : 2,
verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
pixelOffset : new Cesium.Cartesian2(0, -9)
}
}
);

viewer.entities.add(point);
);

否则你调用只会更新位置的 updatePoint 函数

function updatePosition(currentPoint, data)
{
var newPos = new Cesium.Cartesian3.fromDegrees(data.lon, data.lat);
currentPoint.position = newPos;
}

关于javascript - Cesium live update 的一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478805/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com