public void SetData(string s) { if (showingCheckResult) { InfoWindow.Reset(); showingCheckResult = false; } string[] data = s.Split(','); char[] unit = { 'M' }; float latitude = float.Parse(data[4]); float longitude = float.Parse(data[5]); float altitude = float.Parse(data[6].TrimEnd(unit)); // 前回のGPS情報と比較して一致したらreturn if ((latitude == checkLatitude) && (longitude == checkLongitude) && (altitude == checkAltitude)) { // return; } checkLatitude = latitude; checkLongitude = longitude; checkAltitude = altitude; // 重複データではないので描画 count++; lastTime = currentTime; lastAltitude = currentAltitude; currentAltitude = altitude; float rssi = float.Parse(data[2]); string strTime = data[3]; string[] dateTime = strTime.Split(' '); string strDate; string[] timeToken; if (dateTime.Length == 2) { strDate = dateTime[0]; timeToken = dateTime[1].Split(':'); } else { strDate = System.DateTime.UtcNow.ToString("yyyy-MM-dd"); timeToken = strTime.Split(':'); } int iHour = int.Parse(timeToken[0]); int iMinute = int.Parse(timeToken[1]); int iSecond = int.Parse(timeToken[2]); currentTime = iHour * 3600 + iMinute * 60 + iSecond; if (timeToken[0] == "00") { if (currentTime < lastTime) { lastTime -= 3600 * 24; } } strTime = iHour.ToString("00") + ":" + iMinute.ToString("00") + ":" + iSecond.ToString("00"); float deltaTime = (float)(currentTime - lastTime); lastClimingSpeed = climingSpeed; if ((deltaTime > 0f) && (deltaTime < 3600f)) { if (currentAltitude == lastAltitude) { // センサの返す標高が前回と変わらないことがあるので // その場合は前回速度を使う climingSpeed = lastClimingSpeed; } else { climingSpeed = (currentAltitude - lastAltitude) / deltaTime; } } else { climingSpeed = 0f; } string sign = " "; if (rssi < 0) { sign = "-"; rssi = Mathf.Abs(rssi); } string strCount = count.ToString("###"); string strLatitude = latitude.ToString("###.00000"); string strLongitude = longitude.ToString("###.00000"); string strAltitude = currentAltitude.ToString("##,###") + " m"; string strzAltitude = currentAltitude.ToString("00,000") + " m"; string strRSSI = sign + rssi.ToString("###.00 dBm"); string strzRSSI = sign + rssi.ToString("000.00 dBm"); string strClimingSpeed = climingSpeed.ToString("##0.00 m/s"); // 地図の中心を設定(初回のみ) if (!init) { GeoCalculator.UpdateReferencePos(latitude, longitude); mapInitializer.SetMapCenter(latitude, longitude); init = true; } // バルーン位置更新 mover.SetData(latitude, longitude, currentAltitude, rssi, strTime); // バルーンラベル更新 balloonLabel.SetData(strLatitude, strLongitude, strAltitude, strRSSI); // ログウィンドウ更新 InfoWindow.SetData(strDate + " " + strTime + " " + strLatitude + " " + strLongitude + " " + strzAltitude); // データウィンドウ更新 dataWindow.SetData(strCount, strTime, strLatitude, strLongitude, strAltitude, strClimingSpeed, strRSSI); // 標高グラフ更新 altitudeGraph.AddPoint(deltaTime, currentAltitude); // 上昇速度グラフ更新 climingSpeedGraph.AddPoint(deltaTime, climingSpeed); // モジュールイメージ更新 moduleImager.SetData(-rssi); // 電波拡散表示 signal.Ping(); // サウンド更新 if (cfg.SoundEffect) { if (!se.isPlaying) { se.PlayDelayed(0.3f); } } }