d84c527ca7
Add RWY, TAXI, TWR, PARKING map layers Add new static position controller Update Select Airport dialog to use new MapLayers.
74 lines
1.8 KiB
Text
74 lines
1.8 KiB
Text
# Class things:
|
|
var parents = [Map.Controller];
|
|
var __self__ = caller(0)[0];
|
|
Map.Controller.add("Static position", __self__);
|
|
#Map.df_controller = __self__;
|
|
|
|
##
|
|
# A controller to handle static updates of position, for example an airport
|
|
# diagram or non-moving map.
|
|
#
|
|
# Note that in contrast to the Aircraft Controllers, update_pos() or
|
|
# update_layers() must be called explicitly to trigger an update of the map.
|
|
##
|
|
|
|
var new = func(map, source='main') {
|
|
var m = {
|
|
parents: [__self__],
|
|
map: map,
|
|
_pos: nil, _time: nil, _range: nil,
|
|
_alt: 0, _hdg: 0,
|
|
};
|
|
m._pos = geo.Coord.new();
|
|
m._pos.set_latlon(0.0,0.0);
|
|
m.update_pos();
|
|
return m;
|
|
};
|
|
|
|
var del = func(map) {
|
|
if (map != me.map) die();
|
|
};
|
|
|
|
var setHeading = func(hdg) { me._hdg = hdg; };
|
|
var setAltitude = func(alt) { me._alt = alt; };
|
|
var getHeading = func() { return me._hdg; };
|
|
var getAltitude = func() { return me._alt; };
|
|
var setPosition = func(lat, lon) {
|
|
me._pos.set_latlon(lat, lon);
|
|
me.update_pos();
|
|
};
|
|
|
|
var applyOffset = func(x, y) {
|
|
# Apply an offset in screen coordinates, e.g. from a mouse event
|
|
var crs = 0.0;
|
|
if (x != 0.0) {
|
|
# Calculate course in degrees
|
|
crs = 90.0 + 180.0 / math.pi * math.atan(y/x);
|
|
if (x < 0.0 ) crs = crs + 180.0;
|
|
} else {
|
|
if (y < 0.0) crs = 0.0;
|
|
if (y > 0.0) crs = 180.0
|
|
}
|
|
|
|
# Screen resolution m/pixel is range/screen_range
|
|
var screen_range = me.map.getScreenRange() or 200;
|
|
var screen_resolution = me.map.getRange() * globals.NM2M / screen_range;
|
|
me._pos.apply_course_distance(crs, math.sqrt(x*x + y*y) * screen_resolution);
|
|
me.update_pos();
|
|
};
|
|
|
|
# Controller methods
|
|
var update_pos = func {
|
|
me.map.setPos(lat: me._pos.lat(), lon: me._pos.lon(),
|
|
hdg: me._hdg,,
|
|
alt: me._alt,);
|
|
me.map.update();
|
|
};
|
|
|
|
var update_layers = func {
|
|
me.map.update();
|
|
};
|
|
|
|
var get_position = func {
|
|
return [ me._pos.lat(), me._pos.lon() ];
|
|
}
|