我想做的是每秒在地图上找到用户位置。我知道我可以用setInterval(function(),1000);
我正在使用
初始化地图ionViewDidEnter() {
this.map = leaflet.map("map").fitWorld();
this.loadmap();
}
问题是我无法从定位功能到达地图。
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 :(得分:0)
虽然您的问题并不完全清楚,但如果我理解正确,您试图将locate
函数称为setInterval
的第一个参数,但随后会收到一条错误消息,指出{{1}是未定义的还是类似的东西?
在这种情况下,您只需要意识到this.map
是指函数调用者的上下文。当您使用this
(setInterval
相同)时,上下文不再是您的类实例对象(具有setTimeout
的对象),而是全局上下文。这里解释了这个问题:https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval#The_this_problem
有几个简单的解决方案,请参阅Referencing "this" inside setInterval/setTimeout within object prototype methods
话虽如此,由于您希望定期跟踪用户的位置,为什么不依靠this.map
watch
选项?如果您正在尝试解决某些问题(可能是Leaflet .locate watch option breaks .locate after changing tab Ionic 3?),那么您很可能应该解决该问题,而不是尝试解决这些问题。