-
- //calculate the bearing and range of the carrier from the aircraft
- SG_LOG( SG_INSTR, SG_DEBUG, "carrier_lat " << _carrier_lat);
- SG_LOG( SG_INSTR, SG_DEBUG, "carrier_lon " << _carrier_lon);
- SG_LOG( SG_INSTR, SG_DEBUG, "carrier_name " << _carrier_name);
- SG_LOG( SG_INSTR, SG_DEBUG, "carrier_valid " << _carrier_valid);
- geo_inverse_wgs_84(altitude_m,
- latitude_deg,
- longitude_deg,
- _carrier_lat,
- _carrier_lon,
- &carrier_bearing, &carrier_az2, &carrier_distance);
-
-
- //calculate the bearing and range of the station from the aircraft
- geo_inverse_wgs_84(altitude_m,
- latitude_deg,
- longitude_deg,
- _transmitter_lat,
- _transmitter_lon,
- &bearing, &az2, &distance);
-
-
- //select the nearer
- if ( carrier_distance <= distance && _carrier_valid) {
- SG_LOG( SG_INSTR, SG_DEBUG, "carrier_distance_nm " << carrier_distance);
- SG_LOG( SG_INSTR, SG_DEBUG, "distance_nm " << distance);
- bearing = carrier_bearing;
- distance = carrier_distance;
- _transmitter_elevation_ft = _carrier_elevation_ft;
- _transmitter_range_nm = _carrier_range_nm;
- _transmitter_bias = _carrier_bias;
- _transmitter_name = _carrier_name;
- _name_node->setStringValue(_transmitter_name.c_str());
- }
-
- double distance_nm = distance * SG_METER_TO_NM;
- SG_LOG( SG_INSTR, SG_DEBUG, "distance_nm " << distance_nm << " bearing " << bearing);
-
- /*Point3D location =
- sgGeodToCart(Point3D(longitude_rad, latitude_rad, altitude_m));
- double distance_nm = _transmitter.distance3D(location) * SG_METER_TO_NM;*/
-
- double range_nm = adjust_range(_transmitter_elevation_ft,
- altitude_m * SG_METER_TO_FEET,
+
+ //calculate the bearing and range of the mobile from the aircraft
+ double mobile_az2 = 0;
+ double mobile_bearing = 0;
+ double mobile_distance = 0;
+
+ SG_LOG( SG_INSTR, SG_DEBUG, "mobile_name " << _mobile_name);
+ SG_LOG( SG_INSTR, SG_DEBUG, "mobile_valid " << _mobile_valid);
+ geo_inverse_wgs_84(pos, _mobilePos,
+ &mobile_bearing, &mobile_az2, &mobile_distance);
+
+
+ //calculate the bearing and range of the station from the aircraft
+ double az2 = 0;
+ double bearing = 0;
+ double distance = 0;
+
+ geo_inverse_wgs_84(pos, _transmitter_pos,
+ &bearing, &az2, &distance);
+
+
+ //select the nearer
+ if ( mobile_distance <= distance && _mobile_valid) {
+ SG_LOG( SG_INSTR, SG_DEBUG, "mobile_distance_m " << mobile_distance);
+ SG_LOG( SG_INSTR, SG_DEBUG, "distance_m " << distance);
+ bearing = mobile_bearing;
+ distance = mobile_distance;
+ _transmitter_pos.setElevationFt(_mobilePos.getElevationFt());
+ _transmitter_range_nm = _mobile_range_nm;
+ _transmitter_bias = _mobile_bias;
+ _transmitter_name = _mobile_name;
+ _name_node->setStringValue(_transmitter_name.c_str());
+ _transmitter_ident = _mobile_ident;
+ _ident_node->setStringValue(_transmitter_ident.c_str());
+ _channel_node->setStringValue(_channel.c_str());
+ }
+
+ //// calculate some values for boresight display
+ double distance_nm = distance * SG_METER_TO_NM;
+
+ //// calculate look left/right to target, without yaw correction
+ // double horiz_offset = bearing - heading;
+ //
+ // if (horiz_offset > 180.0) horiz_offset -= 360.0;
+ // if (horiz_offset < -180.0) horiz_offset += 360.0;
+
+ //// now correct look left/right for yaw
+ // horiz_offset += yaw;
+
+ // use the bearing for a plan position indicator display
+
+ double horiz_offset = bearing;
+
+ SG_LOG( SG_INSTR, SG_DEBUG, "distance_nm " << distance_nm << " bearing "
+ << bearing << " horiz_offset " << horiz_offset);
+
+ // calculate values for radar display
+ double y_shift = distance_nm * cos( horiz_offset * SG_DEGREES_TO_RADIANS);
+ double x_shift = distance_nm * sin( horiz_offset * SG_DEGREES_TO_RADIANS);
+
+ SG_LOG( SG_INSTR, SG_DEBUG, "y_shift " << y_shift << " x_shift " << x_shift);
+
+ double rotation = 0;
+
+ double range_nm = adjust_range(_transmitter_pos.getElevationFt(),
+ pos.getElevationFt(),