//! 上报新的ARPA目标数据 /*! * \param dwArpaID:ARPA目标ID * \return ARPA数据是否进入统计列表 * \remark 上报新的ARPA目标数据 */ bool ReportSensorArpa(long dwArpaID) { bool bResult = false; target radarTarget = null; AISTarget aisTarget = null; m_np.m_dicTargetCollection.TryGetValue(dwArpaID, out radarTarget); if (radarTarget == null) { return(false); } int nIndex = -1; nIndex = FindUnionAisTarget(dwArpaID, UNION_STATE_SENSOR, UNION_ASSCI | UNION_DISASSCI); if (nIndex != -1) { m_np.m_AISCollection.TryGetValue((int)dwArpaID, out aisTarget); if (aisTarget != null) { bResult = TryUnionTarget(aisTarget, radarTarget, UNION_STATE_SENSOR, nIndex); } } else { float fMinRng = 926 * 1.0f; long dwMinRngID = -1; foreach (var item in m_np.m_AISCollection) { if (FindUnionArpaTarget(item.Value.MMSI, UNION_STATE_SENSOR, UNION_ASSCI | UNION_DISASSCI) != -1) { continue; } tagTARGET_DIFF stTargetDiff = new tagTARGET_DIFF(); if (RetCurState(aisTarget, radarTarget, stTargetDiff) == UNION_ASSCI) { if (stTargetDiff.fRngDiff < fMinRng) { fMinRng = stTargetDiff.fRngDiff; dwMinRngID = item.Value.MMSI; } } if (dwMinRngID != -1) { m_np.m_AISCollection.TryGetValue((int)dwMinRngID, out aisTarget); bResult = TryUnionTarget(aisTarget, radarTarget, UNION_STATE_SENSOR, nIndex); } } } return(true); }
//! 计算AIS和ARPA数据,返回瞬时状态 /*! * \param lpAisTarget:AIS目标指针 * \param lpArpaTarget:Arpa目标指针 * \return 瞬时状态 * \remark 计算AIS和ARPA数据,返回瞬时状态 */ int RetCurState(AISTarget lpAisTarget, target lpArpaTarget, tagTARGET_DIFF lpTargetDiff) { int nCurState = UNION_DISASSCI; float fRangeDist = 0.0f; float fBearDiff = 0.0f; float fCourseDist = 0.0f; float fSpeedDist = 0.0f; double dAisLat = 0.0, dAisLon = 0.0, dArpaLat = 0.0, dArpaLon = 0.0; float fAisSpd = 0.0f, fAisCrs = 0.0f, fArpaSpd = 0.0f, fArpaCrs = 0.0f; // 比较ais与arpa目标的距离、速度的偏差 double dDistance = 0; dDistance = CommonFunctions.GetDistance(lpAisTarget.Latitude, lpAisTarget.Longitude, lpArpaTarget.Latitude, lpArpaTarget.Longitude); dDistance *= NM; fRangeDist = (float)dDistance; fSpeedDist = (float)Math.Abs((lpAisTarget.Speed - lpArpaTarget.Speed)); //if (fAisSpd < NM && fArpaSpd < NM) //{ // fCourseDist = 0.0f; //} //if (fCourseDist > 180) //{ // fCourseDist = 360 - fCourseDist; //} if (lpTargetDiff != null) { lpTargetDiff.fRngDiff = fRangeDist; lpTargetDiff.fSpdDiff = fSpeedDist; } if (fRangeDist < NM && fSpeedDist < 1000) { // 瞬时状态为强联合 nCurState = UNION_ASSCI; } else { // 瞬时状态为分离 nCurState = UNION_DISASSCI; } return(nCurState); }