trackdirect2023/htdocs/public/views/raw.php

509 lines
36 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php require dirname(__DIR__) . "../../includes/bootstrap.php"; ?>
<?php $station = StationRepository::getInstance()->getObjectById($_GET['id'] ?? null); ?>
<?php if ($station->isExistingObject()) : ?>
<?php
$page = $_GET['page'] ?? 1;
$rows = $_GET['rows'] ?? 25;
$offset = ($page - 1) * $rows;
if (($_GET['category'] ?? 1) == 2) {
$packets = PacketRepository::getInstance()->getObjectListWithRawBySenderStationId($station->id, $rows, $offset);
$count = PacketRepository::getInstance()->getNumberOfPacketsWithRawBySenderStationId($station->id);
} else {
$packets = PacketRepository::getInstance()->getObjectListWithRawByStationId($station->id, $rows, $offset);
$count = PacketRepository::getInstance()->getNumberOfPacketsWithRawByStationId($station->id);
}
$pages = ceil($count / $rows);
?>
<title><?php echo $station->name; ?>, сырые данные</title>
<div class="modal-inner-content">
<div class="modal-inner-content-menu">
<a class="tdlink" title="Overview" href="/views/overview.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Подробнее</a>
<a class="tdlink" title="Statistics" href="/views/statistics.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Статистика</a>
<a class="tdlink" title="Trail Chart" href="/views/trail.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Графики</a>
<a class="tdlink" title="Weather" href="/views/weather.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Погода</a>
<a class="tdlink" title="Telemetry" href="/views/telemetry.php?id=<?php echo $station->id ?>&imperialUnits=<?php echo $_GET['imperialUnits'] ?? 0; ?>">Телеметрия</a>
<span>Сырые данные</span>
</div>
<div class="horizontal-line">&nbsp;</div>
<p>
Это последние полученные пакеты, хранящиеся в базе данных для станции/объекта <?php echo $station->name; ?>. Если пакеты не отображаются, значит отправитель не отправлял никаких пакетов за последние 30 дней. Или сервер не смог их принять.
</p>
<?php if ($station->sourceId == 5) : ?>
<p>
<a target="_blank" href="http://wiki.glidernet.org/ddb">База данных устройств OGN</a>
</p>
<?php else : ?>
<p>
Если сравнивать сырые данные с аналогичными данными с других сайтов, они могут отличаться (особенно путь), причина в том, что пакеты могут быть получены с разных серверов APRS-IS. Каждый APRS-IS сервер выполняет фильтрацию дубликатов, и пакет, который считается дубликатом, может по разному отбрасываться на разных серверах. Это влияет на то, какой из множества пакетов в итоге отобразится здесь.
</p>
<?php endif; ?>
<div class="form-container">
<?php if ($station->stationTypeId == 1) : ?>
<select id="raw-category" style="float:left; margin-right: 5px;">
<option <?php echo (($_GET['category'] ?? 1) == 1 ? 'selected' : ''); ?> value="1">Пакеты рядом с <?php echo $station->name; ?></option>
<option <?php echo (($_GET['category'] ?? 1) == 2 ? 'selected' : ''); ?> value="2">Пакеты, отправленные <?php echo $station->name; ?></option>
</select>
<?php endif; ?>
<select id="raw-type" style="float:left; margin-right: 5px;">
<option <?php echo (($_GET['type'] ?? 1) == 1 ? 'selected' : ''); ?> value="1">Сырые данные</option>
<option <?php echo (($_GET['type'] ?? 1) == 2 ? 'selected' : ''); ?> value="2">Декодированные данные</option>
</select>
<select id="raw-rows" style="float:left; margin-right: 5px;" class="pagination-rows">
<option <?php echo ($rows == 25 ? 'selected' : ''); ?> value="25">25 строк</option>
<option <?php echo ($rows == 50 ? 'selected' : ''); ?> value="50">50 строк</option>
<option <?php echo ($rows == 100 ? 'selected' : ''); ?> value="100">100 строк</option>
<option <?php echo ($rows == 200 ? 'selected' : ''); ?> value="200">200 строк</option>
<option <?php echo ($rows == 300 ? 'selected' : ''); ?> value="300">300 строк</option>
</select>
</div>
<?php if ($pages > 1): ?>
<div class="pagination">
<a class="tdlink" href="/views/raw.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1) ?>&type=<?php echo ($_GET['type'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=1"><<</a>
<?php for($i = max(1, $page - 3); $i <= min($pages, $page + 3); $i++) : ?>
<a href="/views/raw.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1) ?>&type=<?php echo ($_GET['type'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=<?php echo $i; ?>" <?php echo ($i == $page ? 'class="tdlink active"': 'class="tdlink"')?>><?php echo $i ?></a>
<?php endfor; ?>
<a class="tdlink" href="/views/raw.php?id=<?php echo $station->id; ?>&category=<?php echo ($_GET['category'] ?? 1) ?>&type=<?php echo ($_GET['type'] ?? 1); ?>&rows=<?php echo $rows; ?>&page=<?php echo $pages; ?>">>></a>
</div>
<?php endif; ?>
<div id="raw-content-output">
<?php foreach (array_slice($packets, 0, $rows) as $packet) : ?>
<?php if (($_GET['type'] ?? 1) == 1) : ?>
<p>
<span class="raw-packet-timestamp"><?php echo $packet->timestamp; ?></span>:
<?php if (in_array($packet->mapId, Array(3, 6))) : ?>
<span class="raw-packet-error">
<?php else : ?>
<span>
<?php endif; ?>
<?php echo str_replace_first(htmlspecialchars($station->name . '>'), '<b>' . htmlspecialchars($station->name) . '</b>&gt;', htmlspecialchars($packet->raw)); ?>
<?php if ($packet->mapId == 3) : ?>
&nbsp;<b>[Дубликат]</b>
<?php elseif ($packet->mapId == 6) : ?>
&nbsp;<b>[Получено в неправильном порядке]</b>
<?php endif; ?>
</span>
</p>
<?php elseif (($_GET['type'] ?? 1) == 2) : ?>
<div class="decoded">
<div class="datagrid">
<table>
<thead>
<tr>
<th colspan="2">
<?php if (in_array($packet->mapId, Array(3, 6))) : ?>
<span class="raw-packet-error">
<?php else : ?>
<span>
<?php endif; ?>
<span class="raw-packet-timestamp"><?php echo $packet->timestamp; ?></span>
<?php if ($packet->mapId == 3) : ?>
&nbsp;<b>[Дубликат]</b>
<?php elseif ($packet->mapId == 6) : ?>
&nbsp;<b>[Получено в неправильном порядке]</b>
<?php endif; ?>
</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Необработанные</td>
<td>
<?php echo str_replace_first(htmlspecialchars($station->name . '>'), '<b>' . htmlspecialchars($station->name) . '</b>&gt;', htmlspecialchars($packet->raw)); ?>
</td>
</tr>
<tr><td>Тип пакета</td><td><?php echo $packet->getPacketTypeName(); ?></td></tr>
<?php if ($packet->getStationObject()->stationTypeId == 2) : ?>
<tr><td>Название объекта</td><td><?php echo htmlspecialchars($packet->getStationObject()->name); ?></td></tr>
<?php else : ?>
<tr><td>Позывной</td><td><?php echo htmlspecialchars($packet->getStationObject()->name); ?></td></tr>
<?php endif; ?>
<?php if ($packet->getStationObject()->name != $packet->getSenderObject()->name) : ?>
<tr><td>Отправитель</td><td><?php echo htmlspecialchars($packet->getSenderObject()->name); ?></td></tr>
<?php endif; ?>
<tr><td>Путь</td><td><?php echo htmlspecialchars($packet->rawPath); ?></td></tr>
<?php if ($packet->reportedTimestamp != null) : ?>
<tr><td>Переданное время</td><td><?php echo $packet->reportedTimestamp; ?> - <span class="raw-packet-timestamp"><?php echo $packet->reportedTimestamp; ?></span></td></tr>
<?php endif; ?>
<?php if ($packet->latitude != null && $packet->longitude != null) : ?>
<tr><td>Latitude</td><td><?php echo round($packet->latitude, 5); ?></td></tr>
<tr><td>Longitude</td><td><?php echo round($packet->longitude, 5); ?></td></tr>
<?php endif; ?>
<?php if ($packet->symbol != null && $packet->symbolTable != null) : ?>
<tr><td>Символ</td><td><?php echo htmlspecialchars($packet->symbol); ?></td></tr>
<tr><td>Таблица символов</td><td><?php echo htmlspecialchars($packet->symbolTable); ?></td></tr>
<?php endif; ?>
<?php if ($packet->speed != null) : ?>
<?php if (isImperialUnitUser()) : ?>
<tr><td>Скорость</td><td><?php echo convertKilometerToMile($packet->speed); ?> миль/ч</td></tr>
<?php else : ?>
<tr><td>Скорость</td><td><?php echo $packet->speed; ?> км/ч</td></tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($packet->course != null) : ?>
<tr><td>Курс</td><td><?php echo $packet->course; ?>°</td></tr>
<?php endif; ?>
<?php if ($packet->altitude != null) : ?>
<?php if (isImperialUnitUser()) : ?>
<tr><td>Высота</td><td><?php echo convertMeterToFeet($packet->altitude); ?> ф</td></tr>
<?php else : ?>
<tr><td>Высота</td><td><?php echo $packet->altitude; ?> м</td></tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($packet->comment != null) : ?>
<?php if ($packet->packetTypeId == 10) : ?>
<tr><td>Статус</td><td><?php echo htmlspecialchars($packet->comment); ?></td></tr>
<?php elseif ($packet->packetTypeId == 7) : ?>
<tr><td>Маяк</td><td><?php echo htmlspecialchars($packet->comment); ?></td></tr>
<?php else : ?>
<tr><td>Комментарий</td><td><?php echo htmlspecialchars($packet->comment); ?></td></tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($packet->posambiguity == 1) : ?>
<tr><td>Неоднозначность положения</td><td>Да</td></tr>
<?php endif; ?>
<?php if ($packet->phg != null) : ?>
<?php if (isImperialUnitUser()) : ?>
<tr><td>PHG</td><td><?php echo $packet->phg; ?> (Расчётный диапазон: <?php echo round(convertKilometerToMile($packet->getPHGRange()/1000),2); ?> миль)</td></tr>
<?php else : ?>
<tr><td>PHG</td><td><?php echo $packet->phg; ?> (Расчётный диапазон: <?php echo round($packet->getPHGRange()/1000,2); ?> км)</td></tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($packet->rng != null) : ?>
<tr><td>RNG</td><td><?php echo $packet->rng; ?></td></tr>
<?php endif; ?>
<?php if ($station->latestWeatherPacketTimestamp !== null) : ?>
<?php $weather = $packet->getPacketWeather(); ?>
<?php if ($weather->isExistingObject()) : ?>
<tr>
<td>Погода</td>
<td>
<table>
<tbody>
<?php if ($weather->wxRawTimestamp !== null) : ?>
<tr>
<td>Время:</td><td><span class="raw-packet-timestamp"><?php echo $weather->wxRawTimestamp; ?></span></td>
</tr>
<?php endif; ?>
<?php if ($weather->temperature !== null) : ?>
<tr>
<td>Температура:</td>
<?php if (isImperialUnitUser()) : ?>
<td><?php echo round(convertCelciusToFahrenheit($weather->temperature), 2); ?>&deg; F</td>
<?php else : ?>
<td><?php echo round($weather->temperature, 2); ?>&deg; C</td>
<?php endif; ?>
</tr>
<?php endif; ?>
<?php if ($weather->humidity !== null) : ?>
<tr>
<td>Влажность:</td>
<td><?php echo $weather->humidity; ?>%</td>
</tr>
<?php endif; ?>
<?php if ($weather->pressure !== null) : ?>
<tr>
<td>Давление:</td>
<?php if (isImperialUnitUser()) : ?>
<td><?php echo round(convertMbarToMmhg($weather->pressure),1); ?> мм.рт.ст.</td>
<?php else : ?>
<td><?php echo round($weather->pressure,1); ?> гПа</td>
<?php endif; ?>
</tr>
<?php endif; ?>
<?php if ($weather->rain_1h !== null) : ?>
<tr>
<td>Осадки за последний час:</td>
<?php if (isImperialUnitUser()) : ?>
<td><?php echo round(convertMmToInch($weather->rain_1h),2); ?> in</td>
<?php else : ?>
<td><?php echo round($weather->rain_1h,2); ?> мм</td>
<?php endif; ?>
</tr>
<?php endif; ?>
<?php if ($weather->rain_24h !== null) : ?>
<tr>
<td>Осадки за последние 24 ч:</td>
<?php if (isImperialUnitUser()) : ?>
<td><?php echo round(convertMmToInch($weather->rain_24h),2); ?> in</td>
<?php else : ?>
<td><?php echo round($weather->rain_24h,2); ?> мм</td>
<?php endif; ?>
</tr>
<?php endif; ?>
<?php if ($weather->rain_since_midnight !== null) : ?>
<tr>
<td>Осадки с полуночи:</td>
<?php if (isImperialUnitUser()) : ?>
<td><?php echo round(convertMmToInch($weather->rain_since_midnight),2); ?> in</td>
<?php else : ?>
<td><?php echo round($weather->rain_since_midnight,2); ?> мм</td>
<?php endif; ?>
</tr>
<?php endif; ?>
<?php if (isImperialUnitUser()) : ?>
<?php if ($weather->wind_speed !== null && $weather->wind_speed > 0) : ?>
<tr>
<td>Скорость ветра:</td>
<td><?php echo round(convertMpsToMph($weather->wind_speed), 2); ?> миль/ч, <?php echo $weather->wind_direction; ?>&deg;</td>
</tr>
<?php elseif($weather->wind_speed !== null) : ?>
<tr>
<td>Скорость ветра:</td>
<td><?php echo round(convertMpsToMph($weather->wind_speed), 2); ?> миль/ч</td>
</tr>
<?php endif; ?>
<?php else : ?>
<?php if ($weather->wind_speed !== null && $weather->wind_speed > 0) : ?>
<tr>
<td>Скорость ветра:</td>
<td><?php echo round($weather->wind_speed, 2); ?> м/с, <?php echo $weather->wind_direction; ?>&deg;</td>
</tr>
<?php elseif($weather->wind_speed !== null) : ?>
<tr>
<td>Скорость ветра:</td>
<td><?php echo round($weather->wind_speed, 2); ?> м/с</td>
</tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($weather->luminosity !== null) : ?>
<tr>
<td>Освещённость:</td><td><?php echo round($weather->luminosity,0); ?> Вт/м&sup2;</td>
</tr>
<?php endif; ?>
<?php if ($weather->snow !== null) : ?>
<tr>
<?php if (isImperialUnitUser()) : ?>
<td>Снег:</td><td><?php echo round(convertMmToInch($weather->snow), 0); ?> in</td>
<?php else : ?>
<td>Снег:</td><td><?php echo round($weather->snow, 0); ?> мм</td>
<?php endif; ?>
</tr>
<?php endif; ?>
</tbody>
</table>
</td>
</tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($station->latestTelemetryPacketTimestamp !== null) : ?>
<?php $telemetry = $packet->getPacketTelemetry(); ?>
<?php if ($telemetry->isExistingObject()) : ?>
<tr>
<td>Аналоговые значения телеметрии</td>
<td>
<table>
<tbody>
<?php for ($i = 1; $i<=5; $i++) : ?>
<?php if ($telemetry->isValueSet($i)) : ?>
<tr>
<td><?php echo htmlspecialchars($telemetry->getValueParameterName($i)); ?>:</td>
<td><?php echo round($telemetry->getValue($i), 2); ?> <?php echo htmlspecialchars($telemetry->getValueUnit($i)); ?></td>
</tr>
<?php endif; ?>
<?php endfor; ?>
</tbody>
</table>
</td>
</tr>
<?php if ($telemetry->bits !== null) : ?>
<tr>
<td>Значения битов телеметрии</td>
<td>
<table>
<tbody>
<?php for ($i = 1; $i<=8; $i++) : ?>
<tr>
<td><?php echo htmlspecialchars($telemetry->getBitParameterName($i)); ?>:</td>
<td><?php echo $telemetry->getBit($i); ?></td>
</tr>
<?php endfor; ?>
</tbody>
</table>
</td>
</tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':UNIT.')) : ?>
<?php $pos = strpos($packet->raw, ':UNIT.'); ?>
<tr>
<td>Телеметрия: единицы</td>
<td>
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
</td>
</tr>
<?php endif; ?>
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':BITS.')) : ?>
<?php $pos = strpos($packet->raw, ':BITS.'); ?>
<tr>
<td>Телеметрия: биты</td>
<td>
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
</td>
</tr>
<?php endif; ?>
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':EQNS.')) : ?>
<?php $pos = strpos($packet->raw, ':EQNS.'); ?>
<tr>
<td>Телеметрия: EQNS</td>
<td>
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
</td>
</tr>
<?php endif; ?>
<?php if ($packet->packetTypeId == 7 && strstr($packet->raw, ':PARM.')) : ?>
<?php $pos = strpos($packet->raw, ':PARM.'); ?>
<tr>
<td>Телеметрия: PARM</td>
<td>
<?php echo htmlspecialchars(substr($packet->raw, $pos + 6)); ?>
</td>
</tr>
<?php endif; ?>
<?php endif; ?>
<?php if ($packet->getPacketOgn()->isExistingObject()) : ?>
<?php if ($packet->getPacketOgn()->ognSignalToNoiseRatio !== null) : ?>
<tr>
<td>Отношение сигнал/шум</td>
<td>
<?php echo $packet->getPacketOgn()->ognSignalToNoiseRatio; ?> dB
</td>
</tr>
<?php endif;?>
<?php if ($packet->getPacketOgn()->ognBitErrorsCorrected !== null) : ?>
<tr>
<td>Bits corrected</td>
<td>
<?php echo $packet->getPacketOgn()->ognBitErrorsCorrected; ?>
</td>
</tr>
<?php endif;?>
<?php if ($packet->getPacketOgn()->ognFrequencyOffset !== null) : ?>
<tr>
<td>Разнос частоты</td>
<td>
<?php echo $packet->getPacketOgn()->ognFrequencyOffset; ?> кГц
</td>
</tr>
<?php endif;?>
<?php if ($packet->getPacketOgn()->ognClimbRate !== null) : ?>
<tr>
<td>Скорость набора высоты</td>
<td>
<?php echo $packet->getPacketOgn()->ognClimbRate; ?> ф/м
</td>
</tr>
<?php endif;?>
<?php if ($packet->getPacketOgn()->ognTurnRate !== null) : ?>
<tr>
<td>Скорость поворота</td>
<td>
<?php echo $packet->getPacketOgn()->ognTurnRate; ?> ф/м
</td>
</tr>
<?php endif;?>
<?php endif;?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php if (count($packets) == 0) : ?>
<p>
<b><i>Не найдено сырых данных.</i></b>
</p>
<?php endif; ?>
</div>
<script>
$(document).ready(function() {
var locale = window.navigator.userLanguage || window.navigator.language;
moment.locale(locale);
$('.raw-packet-timestamp').each(function() {
if ($(this).html().trim() != '' && !isNaN($(this).html().trim())) {
$(this).html(moment(new Date(1000 * $(this).html())).format('L LTSZ'));
}
});
$('#raw-category').change(function () {
loadView("/views/raw.php?id=<?php echo $station->id ?>&type=" + $('#raw-type').val() + "&category=" + $('#raw-category').val() + "&rows=" + $('#raw-rows').val() + "&page=1");
});
$('#raw-type').change(function () {
loadView("/views/raw.php?id=<?php echo $station->id ?>&type=" + $('#raw-type').val() + "&category=" + $('#raw-category').val() + "&rows=" + $('#raw-rows').val() + "&page=1");
});
$('#raw-rows').change(function () {
loadView("/views/raw.php?id=<?php echo $station->id ?>&type=" + $('#raw-type').val() + "&category=" + $('#raw-category').val() + "&rows=" + $('#raw-rows').val() + "&page=1");
});
if (window.parent && window.parent.trackdirect) {
<?php if ($station->latestConfirmedLatitude != null && $station->latestConfirmedLongitude != null) : ?>
window.parent.trackdirect.addListener("map-created", function() {
window.parent.trackdirect.focusOnStation(<?php echo $station->id ?>, true);
});
<?php endif; ?>
}
});
</script>
<?php endif; ?>