这个问题与这个问题有关:Updating Leaflet Marker Position Every x Seconds with JSON。只有我想将使用Leaflet创建的地图投影到使用WebGLEarth的3D地球仪上。通常,您可以通过在原始Leaflet代码中使用WE.map,WE.marker替换L.map,L.marker等来组合Leaflet和WebGLEarth。
我想将国际空间站的当前位置投影到我的3D地球仪上,所以我在此代码的update_position函数中替换了L.marker ......
var cloudmadeUrl = 'http://{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg';
var subDomains = ['otile1','otile2','otile3','otile4'];
var cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 11, subdomains: subDomains});
var map = new L.Map('map', {layers : [cloudmade]}).fitWorld();
var iss;
function update_position() {
$.getJSON('http://open-notify-api.herokuapp.com/iss-now.json?callback=?', function(data) {
console.log(data);
var latitude = data["iss_position"]["latitude"];
var longitude = data["iss_position"]["longitude"];
if (!iss) {
iss = L.marker([latitude,longitude]).bindPopup("I am the ISS").addTo(map);
}
iss.setLatLng([latitude,longitude]).update();
setTimeout(update_position, 1000);
});
}
update_position();
...... WE.marker。不幸的是,位置的更新在我的3D地球仪上不再起作用,而它确实在2D地图上工作。 我尝试添加
setInterval(update_position,2000);
就在update_position();正上方,然后标记会更新几次(~5),然后突然停止。如果我通过平移与地球上的鼠标进行交互,则标记会更新到当前位置并在之后更新几次,并最终再次停止。
主要问题: 有谁知道如何解决这个问题,以便我有一个连续的标记更新?
附加问题: 理想情况下,我希望国际空间站的轨道看起来像https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=CZML.html&label=Showcases,车站在绕地球的最后一个轨道上行进的彩色路径。关于如何做到这一点的任何提示?
提前致谢!
[编辑23-1-2015: 我设法通过为iis创建一个新变量,即iis2来不断更新它。为什么这个工作对我来说并不清楚。不幸的是,所有“旧的”标记位置都不会消失,所以我得到了一个模糊的标记轨迹。
var iss;
var iis2;
function update_position() {
$.getJSON('http://open-notify-api.herokuapp.com/iss-now.json?callback=?', function(data) {
console.log(data);
var latitude = data["iss_position"]["latitude"];
var longitude = data["iss_position"]["longitude"];
if (!iss) {
iss2 = WE.marker([latitude,longitude]).bindPopup("I am the ISS").addTo(map);
}
iss2.setLatLng([latitude,longitude]).update();
});
}
update_position();
setInterval(update_position,1000);
答案 0 :(得分:0)
删除标记 p>
var iss;
var iis2;
function update_position() {
$.getJSON('http://open-notify-api.herokuapp.com/iss-now.json?callback=?', function(data) {
console.log(data);
map.removeLayer(iss2);
var latitude = data["iss_position"]["latitude"];
var longitude = data["iss_position"]["longitude"];
if (!iss) {
iss2 = WE.marker([latitude,longitude]).bindPopup("I am the ISS").addTo(map);
}
iss2.setLatLng([latitude,longitude]).update();
});
}
update_position();
setInterval(update_position,1000);