Javascript 铯点的实时更新?
我目前正在开发铯的实时跟踪应用程序,但在浏览器中显示该点时遇到了一些问题 到目前为止,我的铯查看器从服务器接收数据(JSON格式)并在地图上正确显示点,但让它更新地图上位置的唯一方法是刷新页面。请注意,它从中读取位置的location.json文件每隔一秒左右就会从服务器更新一个新位置 现在我想它可以做到这一点,因为客户端代码没有“更新”功能来动态更改地图上的点位置 那么,让铯元素不断更新地图上的点,而不让用户不断刷新页面,最简单的方法是什么呢?根据我的研究,我发现了一些涉及CZML文件流或将JSON转换为数据源的示例,但对于看似简单的任务来说,这些似乎有点复杂。是否有一个简单的“更新”功能可以动态更改点 这是我的客户端代码:Javascript 铯点的实时更新?,javascript,html,json,dictionary,cesium,Javascript,Html,Json,Dictionary,Cesium,我目前正在开发铯的实时跟踪应用程序,但在浏览器中显示该点时遇到了一些问题 到目前为止,我的铯查看器从服务器接收数据(JSON格式)并在地图上正确显示点,但让它更新地图上位置的唯一方法是刷新页面。请注意,它从中读取位置的location.json文件每隔一秒左右就会从服务器更新一个新位置 现在我想它可以做到这一点,因为客户端代码没有“更新”功能来动态更改地图上的点位置 那么,让铯元素不断更新地图上的点,而不让用户不断刷新页面,最简单的方法是什么呢?根据我的研究,我发现了一些涉及CZML文件流或将J
<!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>
你好,世界!
@导入url(../Build/Cesium/Widgets/Widgets.css);
html,正文,#cesiumContainer{
宽度:100%;高度:100%;边距:0;填充:0;溢出:隐藏;
}
var查看器=新的铯查看器(“铯容器”);
celium.loadJson('/location.json')。然后(函数(数据){
控制台日志(数据);
viewer.entities.add({
name:data.name,
位置:铯.笛卡尔3.fromDegrees(data.lon,data.lat),
要点:{
像素大小:5,
颜色:铯,颜色,红色,
大纲颜色:铯。颜色。白色,
大纲图第1页第2页
},
标签:{
text:data.name,
字体:“14pt单空格”,
样式:铯。标签样式。填充和轮廓,
大纲第1页第2页,
Verticargin:Ce.Verticargin.BOTTOM,
像素偏移:新的铯。笛卡尔氮(0,-9)
}
});
viewer.zoomTo(viewer.entities);
});
如果您需要我提供更多信息,我很乐意提供
谢谢 您需要保留对每个点的引用,然后根据某个唯一id简单地更新该元素的位置。如果名称是唯一的,则可以使用该名称,否则您需要在更新后实现某种方法来标识每个点。 通过调用
var currentPoint=viewer.entities.getById(data.id)
,可以检查该点是loadJSON回调函数中的新点还是现有点。然后您可以选择调用这些函数中的哪一个。新点的第一个(当currentpoint==未定义时):
否则调用updatePoint函数,只更新位置
function updatePosition(currentPoint, data)
{
var newPos = new Cesium.Cartesian3.fromDegrees(data.lon, data.lat);
currentPoint.position = newPos;
}
因为似乎只有一个点需要跟踪,所以在第一次加载JSON时调用addNewPoint,在后续加载时调用updatePosition。然后你可以周期性地调用这个函数,也可以在用户的某个操作上调用它,无论哪个操作适合你。非常好,只需稍微调整一下它的工作方式就可以了!谢谢
function updatePosition(currentPoint, data)
{
var newPos = new Cesium.Cartesian3.fromDegrees(data.lon, data.lat);
currentPoint.position = newPos;
}