Exemplo n.º 1
0
    // Построить туннель
    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;
        }
    }
Exemplo n.º 2
0
    // Разобрать по данные из файла по отдельным самолетам
    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("================== Данные из файла по отдельным самолетам разобраны ===================");
    }