using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace Ips.Library.SigLoc { public class WarSatFreq { public WarSatFreq() { } public WarSatFreq(long upFreq, long downFreq) { this.UpFreq = upFreq; this.DownFreq = downFreq; } public long UpFreq { get; set; } public long DownFreq { get; set; } static Dictionary _freqCache = new Dictionary(); public static long GetDownFreq(long upFreq) { if (upFreq == 0) return 0; if (!_freqCache.ContainsKey(upFreq)) { var freqItem = WarSatFreqData.ZsxSigList .Select(m => new { AbsValue = Math.Abs(m.UpFreq - upFreq), m.UpFreq, m.DownFreq }) .OrderBy(m => m.AbsValue) .FirstOrDefault(); if (freqItem == null) return 0; var result = upFreq - (freqItem.UpFreq - freqItem.DownFreq); _freqCache.Add(upFreq, result); } return _freqCache[upFreq]; } } public static class WarSatFreqData { public const string ZsxSigFreqListString = @"310.75,269.75 292.85,251.85 302.865,249.265 302.875,249.275 302.885,249.285 302.895,249.295 302.9,249.3 302.905,249.305 302.915,249.315 302.925,249.325 302.935,249.335 302.945,249.345 302.95,249.35 302.855,249.255 302.955,249.355 311.15,257.55 316.955,243.855 316.96,243.86 316.975,243.875 317,243.9 317.01,243.91 317.015,243.915 317.025,243.925 317.035,243.935 317.045,243.945 317.055,243.955 307.75,254.15 302.85,249.25 302.845,249.245 302.835,249.235 302.625,249.025 302.635,249.035 302.645,249.045 302.65,249.05 302.655,249.055 302.665,249.065 302.675,249.075 302.685,249.085 302.695,249.095 302.7,249.1 302.705,249.105 302.715,249.115 302.725,249.125 302.735,249.135 302.745,249.145 302.75,249.15 302.755,249.155 302.765,249.165 302.775,249.175 302.785,249.185 302.795,249.195 302.8,249.2 302.805,249.205 302.815,249.215 302.825,249.225 317.065,243.965 317.075,243.975 317.085,243.985 317.09,243.99 317.31,244.21 317.315,244.215 317.325,244.225 296.35,255.35 296.45,255.45 296.55,255.55 297.85,256.85 297.95,256.95 298.05,257.05 298.15,257.15 299.35,258.35 299.45,258.45 299.55,258.55 299.65,258.65 306.25,265.25 306.35,265.35 306.45,265.45 306.55,265.55 307.75,266.75 307.85,266.85 307.95,266.95 308.05,267.05 309.15,268.15 309.25,268.25 309.35,268.35 317.305,244.205 302.615,249.015 317.3,244.2 317.29,244.19 317.095,243.995 317.1,244 317.105,244.005 317.11,244.01 317.115,244.015 317.125,244.025 317.135,244.035 317.145,244.045 317.155,244.055 317.165,244.065 317.175,244.075 317.185,244.085 317.19,244.09 317.195,244.095 317.2,244.1 317.205,244.105 317.21,244.11 317.215,244.115 317.225,244.125 317.235,244.135 317.245,244.145 317.255,244.155 317.265,244.165 317.275,244.175 317.285,244.185 317.295,244.195 302.605,249.005 302.6,249 302.595,248.995 294.425,260.825 294.45,260.85 295.05,261.45 295.075,261.475 295.1,261.5 295.125,261.525 295.15,261.55 295.175,261.575 295.2,261.6 295.225,261.625 295.25,261.65 295.275,261.675 295.3,261.7 295.325,261.725 295.35,261.75 295.375,261.775 295.4,261.8 295.425,261.825 295.45,261.85 295.475,261.875 295.5,261.9 295.525,261.925 295.55,261.95 295.65,262.05 295.675,262.075 294.4,260.8 295.7,262.1 294.375,260.775 294.325,260.725 292.95,251.95 293.05,252.05 293.15,252.15 294.55,253.55 294.65,253.65 294.75,253.75 294.85,253.85 296.25,255.25 310.85,269.85 310.95,269.95 293.95,260.35 293.975,260.375 294,260.4 294.025,260.425 294.05,260.45 294.075,260.475 294.1,260.5 294.125,260.525 294.15,260.55 294.175,260.575 294.2,260.6 294.225,260.625 294.25,260.65 294.275,260.675 294.3,260.7 294.35,260.75 309.45,268.45 295.725,262.125 295.775,262.175 297.5,263.9 297.525,263.925 297.55,263.95 297.575,263.975 297.6,264 297.625,264.025 297.65,264.05 302.445,248.845 302.45,248.85 302.455,248.855 302.465,248.865 302.475,248.875 302.485,248.885 302.495,248.895 302.5,248.9 302.505,248.905 302.515,248.915 302.525,248.925 302.535,248.935 302.545,248.945 302.55,248.95 302.555,248.955 302.565,248.965 302.575,248.975 302.585,248.985 297.475,263.875 295.75,262.15 297.45,263.85 297.4,263.8 295.8,262.2 295.825,262.225 295.85,262.25 295.875,262.275 295.9,262.3 295.925,262.325 295.95,262.35 295.975,262.375 296,262.4 296.025,262.425 296.05,262.45 296.075,262.475 296.1,262.5 296.125,262.525 296.15,262.55 297.15,263.55 297.175,263.575 297.2,263.6 297.225,263.625 297.25,263.65 297.275,263.675 297.3,263.7 297.325,263.725 297.35,263.75 297.375,263.775 297.425,263.825 310.65,269.65"; private static List _zsxSigList; public static List ZsxSigList { get { if (_zsxSigList == null) { _zsxSigList = new List(); using (var reader = new StringReader(ZsxSigFreqListString)) { string line; while ((line = reader.ReadLine()) != null) { var upDownFreqArr = line.Split(','); if (upDownFreqArr.Length > 1) { var upfreq = decimal.Parse(upDownFreqArr[0]) * 1e6m; var downfreq = decimal.Parse(upDownFreqArr[1]) * 1e6m; var freqBssic = new WarSatFreq((long)upfreq, (long)downfreq); _zsxSigList.Add(freqBssic); } } } } return _zsxSigList; } } } }