diff --git a/html/planeObject.js b/html/planeObject.js
index c3308fc..b9785fd 100644
--- a/html/planeObject.js
+++ b/html/planeObject.js
@@ -1099,9 +1099,8 @@ PlaneObject.prototype.processTrace = function() {
noPan = false;
showTraceExit = false;
- this.updateMarker();
-
if (!showTime) {
+ this.updateMarker();
this.updateLines();
}
@@ -1118,6 +1117,9 @@ PlaneObject.prototype.updatePositionData = function(now, last, data, init) {
this.moveMarker |= newPos;
this.drawLine |= newPos;
+ if (this == SelectedPlane && FollowSelected)
+ toggleFollow(true);
+
if (globeIndex && newPos) {
let state = {};
state.now = this.position_time;
diff --git a/html/script.js b/html/script.js
index 604b9c1..7ae85f2 100644
--- a/html/script.js
+++ b/html/script.js
@@ -2799,7 +2799,13 @@ function toggleFollow(override) {
if (FollowSelected) {
//if (override == undefined && OLMap.getView().getZoom() < 8)
// OLMap.getView().setZoom(8);
- OLMap.getView().setCenter(ol.proj.fromLonLat(SelectedPlane.position));
+ if (traceOpts.animate) {
+ OLMap.getView().setCenter([traceOpts.animateFromLon, traceOpts.animateFromLat]);
+ changeCenter();
+ } else {
+ OLMap.getView().setCenter(ol.proj.fromLonLat(SelectedPlane.position));
+ }
+ SelectedPlane.updateMarker();
}
buttonActive('#F', FollowSelected);
}
@@ -3494,19 +3500,23 @@ function bearingFromLonLat(position1, position2) {
function zoomIn() {
const zoom = OLMap.getView().getZoom();
OLMap.getView().setZoom((zoom+1).toFixed());
+ if (FollowSelected)
+ toggleFollow(true);
}
function zoomOut() {
const zoom = OLMap.getView().getZoom();
OLMap.getView().setZoom((zoom-1).toFixed());
+ if (FollowSelected)
+ toggleFollow(true);
}
function changeCenter(init) {
const rawCenter = OLMap.getView().getCenter();
const center = ol.proj.toLonLat(rawCenter);
- localStorage['CenterLon'] = CenterLon = center[0];
- localStorage['CenterLat'] = CenterLat = center[1];
+ checkMoveCenter[0] = localStorage['CenterLon'] = CenterLon = center[0];
+ checkMoveCenter[1] = localStorage['CenterLat'] = CenterLat = center[1];
if (!init && showTrace)
updateAddressBar();
@@ -3555,25 +3565,20 @@ function checkMovement() {
function checkRefresh() {
const center = ol.proj.toLonLat(OLMap.getView().getCenter());
const zoom = OLMap.getView().getZoom();
- if (!triggerMapRefresh && ZoomLvl == zoom && center[0] == CenterLon && center[1] == CenterLat)
+ if (showTrace)
return;
- //console.time("refreshTable");
- refreshSelected();
- refreshHighlighted();
- TAR.planesTable.refresh();
- mapRefresh();
- //console.timeEnd("refreshTable");
-
-
- // work around an issue with webGL not showing planes on first mapRefresh
- if (false && firstDraw) { // ... doesn't help?
+ if (triggerMapRefresh || ZoomLvl != zoom || center[0] != CenterLon || center[1] != CenterLat) {
+ //console.time("refreshTable");
+ refreshSelected();
+ refreshHighlighted();
+ TAR.planesTable.refresh();
mapRefresh();
- firstDraw = false;
- }
+ //console.timeEnd("refreshTable");
- triggerMapRefresh = false;
- changeZoom();
- changeCenter();
+ triggerMapRefresh = false;
+ changeZoom();
+ changeCenter();
+ }
}
function mapRefresh() {
//console.log('mapRefresh()');
@@ -4524,10 +4529,13 @@ function gotoTime(timestamp) {
let animatePos = [traceOpts.animateFromLon, traceOpts.animateFromLat];
SelectedPlane.marker.setGeometry(new ol.geom.Point(animatePos));
+ if (SelectedPlane.glMarker)
+ SelectedPlane.glMarker.setGeometry(new ol.geom.Point(animatePos));
- //console.log('int: ', animatePos);
- if (FollowSelected)
- OLMap.getView().setCenter(animatePos);
+ if (FollowSelected) {
+ OLMap.getView().setCenter([traceOpts.animateFromLon, traceOpts.animateFromLat]);
+ changeCenter();
+ }
}
if (--traceOpts.animateSteps == 1)
traceOpts.animate = false;
@@ -4536,15 +4544,16 @@ function gotoTime(timestamp) {
}
function checkFollow() {
- if (!FollowSelected || traceOpts.showTime)
+ if (!FollowSelected)
return;
if (!SelectedPlane || !SelectedPlane.position) {
toggleFollow(false);
return;
}
const center = ol.proj.toLonLat(OLMap.getView().getCenter());
- if (Math.abs(center[0] - SelectedPlane.position[0]) > 0.001 ||
- Math.abs(center[1] - SelectedPlane.position[1]) > 0.001) {
+ let pos = SelectedPlane.position;
+ if (Math.abs(center[0] - pos[0]) > 0.001 ||
+ Math.abs(center[1] - pos[1]) > 0.001) {
toggleFollow(false);
} else {
toggleFollow(true);