// Построить туннель public void BuildTunnel(string myKey) { // Создать новый туннель Transform NewTunnel = Instantiate(_SampleTunnel); NewTunnel.name = "Tunnel_" + myKey; NewTunnel.gameObject.SetActive(true); NewTunnel.parent = _SkyTunnels; // Данные одного туннеля TunneData OnePlaneTunnel = _SkyTunnel[myKey]; for (int i = 1; i < OnePlaneTunnel.time_position.Count; i += _FramePaintCount) { // Создать новые ворота Transform NewFrame = Instantiate(_SampleFrame); NewFrame.name = "Frame_" + i; NewFrame.gameObject.SetActive(true); NewFrame.parent = NewTunnel; NewFrame.position = OnePlaneTunnel.position[i]; Vector3 myEu = Vector3.zero; myEu.y = OnePlaneTunnel.true_track[i]; NewFrame.eulerAngles = myEu; } }
// Разобрать по данные из файла по отдельным самолетам void SeparateFileData(string[] RecData) { int RecordsCount = RecData.Length; print("================== Разобрать по данные из файла по отдельным самолетам ==================="); print("Всего записей в файле: " + RecordsCount); for (int i = 1; i < RecordsCount; i++) { // Парсим строку и создаем объект JSON dynamic myJObj = JObject.Parse(RecData[i]); // Узел "states" - массив состояний самолетов (статических векторов) JArray myAcList = myJObj.states; // Создаем одиночный экземпляр структуры массивов TunneData OnePlaneTunnel = new TunneData(); // Данные одного туннеля // Создадим из объекта JSON структуру, добавим ее в словарный массив (или перепишем, если такая уже имеется) for (int j = 0; j < myAcList.Count; j++) { // JSON-массив параметров для одного самолета, полученный из myJObj (элементы массива разных типов) JArray myAcItem = (JArray)myAcList[j]; // Вспомогательные переменные long time_position; // Unix timestamp (seconds) for the last position update. Can be null if no position report was received by OpenSky within the past 15s. float longitude; // WGS-84 longitude in decimal degrees. Can be null. float latitude; // WGS-84 latitude in decimal degrees. Can be null. float geo_altitude; // Geometric altitude in meters. Can be null. float true_track; // True track in decimal degrees clockwise from north (north=0°). Can be null. // Код ИКАО самолета. Unique ICAO 24-bit address of the transponder in hex string representation. string myKey = myAcItem[0].ToString(); // Время последних данных о положении самолета long.TryParse(myAcItem[3].ToString(), out time_position); // Долгота Single.TryParse(myAcItem[5].ToString(), out longitude); // Широта Single.TryParse(myAcItem[6].ToString(), out latitude); // Высота по GPS Single.TryParse(myAcItem[13].ToString(), out geo_altitude); // Курс в градусах Single.TryParse(myAcItem[10].ToString(), out true_track); // Если самолет с таким ключом уже есть в словаре if (_SkyTunnel.TryGetValue(myKey, out OnePlaneTunnel)) // Считаем его параметры в экземпляр структуры массивов OnePlaneTunnel { // Добавим данные новой точки в каждый массив структуры OnePlaneTunnel.time_position.Add(time_position); OnePlaneTunnel.longitude.Add(longitude); OnePlaneTunnel.latitude.Add(latitude); OnePlaneTunnel.geo_altitude.Add(geo_altitude); OnePlaneTunnel.true_track.Add(true_track); OnePlaneTunnel.position.Add(SceneCoordinates(longitude, latitude, geo_altitude)); // Перепишем пополненную структуру в словаре _SkyTunnel[myKey] = OnePlaneTunnel; } else // Создадим новый самолет в словаре { // Инициализируем массивы в структуре массивов OnePlaneTunnel.time_position = new List <long> { time_position }; OnePlaneTunnel.longitude = new List <float> { longitude }; OnePlaneTunnel.latitude = new List <float> { latitude }; OnePlaneTunnel.geo_altitude = new List <float> { geo_altitude }; OnePlaneTunnel.true_track = new List <float> { true_track }; OnePlaneTunnel.position = new List <Vector3> { SceneCoordinates(longitude, latitude, geo_altitude) }; // Добавим новую запись в словарь _SkyTunnel.Add(myKey, OnePlaneTunnel); } } } print("Всего самолетов: " + _SkyTunnel.Count); print("Записей для каждого:"); foreach (string myKey in _SkyTunnel.Keys) { print(myKey + ": " + _SkyTunnel[myKey].time_position.Count); } print("================== Данные из файла по отдельным самолетам разобраны ==================="); }