2016-12-20 1 views
3

リーフレットの新機能で、Open Notify API(http://open-notify.org/Open-Notify-API/)を使ってマップ上のISSを追跡しています。マーカーを作成し、マップに追加した後、私はオープンで提供される次の関数が通知を呼び出す:マーカーを動かすときのリーフレットエラー:setLatLngは関数ではありません

function moveISS() { 
    $.getJSON('http://api.open-notify.org/iss-now.json?callback=?', function(data) { 
     var lat = data['iss_position']['latitude']; 
     var lon = data['iss_position']['longitude']; 

     iss.setLatLng([lat, lon]); 
     isscirc.setLatLng([lat, lon]); 
     map.panTo([lat, lon], animate=true); 
    }); 
    setTimeout(moveISS, 5000); 
} 

これが正常に緯度と経度の値を取得しますが、その後、私はエラーを取得する:

Uncaught TypeError: iss.setLatLng is not a function 

私はリーフレットのドキュメント(http://leafletjs.com/reference-1.0.2.html#marker-setlatlng)からsetLatLngメソッドが存在することを知っています。なぜそれが呼び出されないのですか?それが認識される前に最初にインストールする必要がある別のプラグインはありますか?

+0

'iss'は定義されていませんか? –

+0

それはそれでした。私は関数の外で定義したと思っていましたが、私が見たことのないどこかに構文エラーがあったに違いありません。問題がsetLatLngであると思って周りを回る。 – Sydney

答えて

0

オープン通知のサンプルから、サンプルコード内のコメントがありました:

See leaflet docs for setting up icons and map layers

は疑問に示すコードは、issの定義を示していません。このエラーは、リーフレットではない可能性があることを示しています。

ississcircリーフレットのサンプルコードのように定義されるかもしれない。

var iss = L.marker([51.5, -0.09]).addTo(map).bindPopup("<b>The International Space Station</b>").openPopup(); 

var isscirc = L.circle([51.508, -0.11], 500, { 
    color: 'red', 
    fillColor: '#f03', 
    fillOpacity: 0.5 
}).addTo(map); 

開始は、上記座標は任意であり、moveISSの最初の呼び出し時に更新されます。

jsfiddleを参照してください。リーフレットのサンプルコードに適合しています。

+0

これはまさにそれでした。問題は変数を初期化していたのですが、間違っていました。私の面倒な間違い。 – Sydney

関連する問題