2

この質問は、次の質問に関連しています: Updating Leaflet Marker Position Every x Seconds with JSON . Leaflet で作成した地図を WebGLEarth で 3D 地球儀に投影したいだけです。通常、オリジナルの Leaflet コードの L.map、L.marker などを WE.map、WE.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による。残念ながら、位置の更新は、2D マップでは機能していましたが、3D グローブでは機能しなくなりました。追加してみました

setInterval(update_position,2000);

update_position(); のすぐ上で、マーカーが数回 (~5) 更新された後、突然停止します。パンして地球上でマウスを操作すると、マーカーが現在の位置に更新され、その後数回更新され、最終的に再び停止します。

主な質問: マーカーを継続的に更新できるように、これを修正する方法を知っている人はいますか?

追加の質問: 理想的には、国際宇宙ステーションの軌道をhttps://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=CZML.html&label=Showcasesのようにしたいと思います。地球を一周する最後の軌道。これを行う方法に関するヒントはありますか?

前もって感謝します!

[2015 年 1 月 23 日編集: 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);

]

4

1 に答える 1