2017-10-31 11 views
0

からthis.map達するごとsecond.I地図上でユーザーの位置を突き止めるある私はカントは、私がやろうとしていますどのような機能のリーフレット

ionViewDidEnter() { 
    this.map = leaflet.map("map").fitWorld(); 
    this.loadmap(); 
} 
でマップを初期化しています私は setInterval(function(),1000);

で関数を呼び出すことができます知っています

Locate関数からマップに到達できないという問題があります。

function locate(){ 

var marker; 

this.map.locate({ 
    setView: true, 
    maxZoom: 120 
}).on("locationfound", e => { 
    if (!marker) { 
     marker = new L.marker(e.latlng).addTo(this.map); 
    } else { 
     marker.setLatLng(e.latlng); 
    } 
}).on("locationerror", error => { 
    if (marker) { 
     map.removeLayer(marker); 
     marker = undefined; 
    } 
}); 
} 

私が関数locate()を削除した場合。 this.map.locateは動作しますが、私は自分の場所を追跡するためにeverysecondというユーザを探したいので、.locate everysecondを呼び出す必要がありますので、毎秒setintervalで機能する呼び出しを関数に入れようとしましたが、関数内に.locateを置かずにユーザーを見つけることができますか?完全に明確ではないであなたの質問が、

+0

[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように聞こえます... – ghybs

答えて

0

私が正しく理解していれば、あなたはsetIntervalの最初の引数としてあなたlocate関数を呼び出ししようとしているが、その後、あなたはthis.mapが未定義またはそのような何かであるというエラーメッセージが表示されますか?

この場合、thisが関数呼び出し元のコンテキストを参照することを認識するだけで済みます。 setIntervalsetTimeoutと同じ)を使用すると、コンテキストはもはやクラスインスタンスオブジェクト(this.mapを持つオブジェクト)ではなくグローバルコンテキストになります。問題は、ここで説明されています​​

いくつかの簡単な解決策はありますが、あなたが定期的に利用者の位置を追跡するために、言われていることReferencing "this" inside setInterval/setTimeout within object prototype methods

を参照してください、あなただけmap.locatewatchオプションに依存しない理由?回避策をいくつかの問題(おそらくLeaflet .locate watch option breaks .locate after changing tab Ionic 3?)にしようとしている場合、その問題を回避するよりも、その問題を解決する可能性が高いです。

+0

時計オプションは動作していません。ユーザーは最初に移動します。ユーザーが移動すると、最初の位置に移動します。 – rektandpepper

+0

あなたのために働かない 'watch'オプションについて調べるべきです。 Chromeでうまく動作します。 – ghybs

関連する問題