ycdev/php-igc-inspector
Composer 安装命令:
composer require ycdev/php-igc-inspector
包简介
Php library for manipulating IGC files
README 文档
README
Bibliothèque PHP pour lire et manipuler les fichiers IGC (International Gliding Commission).
Installation
composer require ycdev/php-igc-inspector
Utilisation de base
use Ycdev\PhpIgcInspector\PhpIgcInspector; // Créer une instance depuis un fichier $inspector = PhpIgcInspector::fromFile('vol.igc'); // Valider et parser le fichier $inspector->validate(); // Récupérer les données parsées $flight = $inspector->getFlight(); // Exporter en JSON $json = $inspector->toJson();
Documentation
Consultez le dossier doc/ pour les spécifications du format IGC.
Structure
phpIgcInspector/
├── src/
│ ├── PhpIgcInspector.php # Classe principale
│ ├── PhpIgcUtils.php # Fonctions utilitaires
│ ├── Exception/
│ │ └── InvalidIgcException.php # Exception personnalisée
│ ├── Data/
│ │ ├── EventTypeCode.php # Codes d'événements
│ │ └── ManufacturerCodesData.php # Codes fabricants IGC
│ └── RecordTypes/ # Types d'enregistrements IGC
└── doc/ # Documentation et spécifications IGC
API - Classe PhpIgcInspector
Constructeur
public function __construct(string $content, bool $withRaw = false)
Crée une instance avec le contenu brut du fichier IGC.
Paramètres :
$content: Contenu du fichier IGC$withRaw: Sitrue, ajoute le champ 'raw' dans les données parsées
Exemple :
$content = file_get_contents('vol.igc'); $inspector = new PhpIgcInspector($content);
Méthodes statiques
fromFile()
public static function fromFile(string $filePath, bool $withRaw = false): self
Crée une instance depuis un fichier.
Paramètres :
$filePath: Chemin vers le fichier IGC$withRaw: Sitrue, ajoute le champ 'raw' dans les données parsées
Retour : Instance de PhpIgcInspector
Exemple :
$inspector = PhpIgcInspector::fromFile('vol.igc');
rawExtractFromFile()
public static function rawExtractFromFile(string $igcFilePath, string $outputDirectory, ?string $prefix = null): array
Extrait chaque type d'enregistrement depuis un fichier IGC dans des fichiers séparés.
Paramètres :
$igcFilePath: Chemin vers le fichier IGC source$outputDirectory: Répertoire de sortie pour les fichiers extraits$prefix: Préfixe pour les noms de fichiers (optionnel)
Retour : Tableau associatif avec le type d'enregistrement comme clé et le chemin du fichier comme valeur
Exemple :
$files = PhpIgcInspector::rawExtractFromFile('vol.igc', './extracted', 'mon_vol'); // Retourne : ['A' => './extracted/mon_vol_record_A.igc', 'B' => './extracted/mon_vol_record_B.igc', ...]
Méthodes d'instance
validate()
public function validate(): bool
Valide et parse le contenu du fichier IGC.
Retour : true si le fichier est valide
Lance : InvalidIgcException si le fichier n'est pas valide
Exemple :
try { $inspector->validate(); echo "Fichier valide !"; } catch (InvalidIgcException $e) { echo "Erreur : " . $e->getMessage(); }
getFlight()
public function getFlight(): ?object
Retourne l'objet flight parsé contenant toutes les données du fichier IGC.
Retour : Objet flight ou null si le fichier n'a pas été validé
Exemple :
$flight = $inspector->getFlight(); echo "Nombre de points GPS : " . count($flight->Fix); echo "Pilote : " . $flight->OtherInformation->pilot;
getMetadata()
public function getMetadata(): ?object
Retourne uniquement les métadonnées du vol (records uniques uniquement, sans les tableaux de points GPS).
Retour : Objet contenant uniquement les métadonnées ou null
Exemple :
$metadata = $inspector->getMetadata(); // Contient : OtherInformation, Task, Manufacturer, etc. // Ne contient PAS : Fix (tableau de points GPS)
toJson()
public function toJson(): ?string
Retourne l'objet flight au format JSON (avec formatage et caractères Unicode non échappés).
Retour : Représentation JSON de l'objet flight ou null
Exemple :
$json = $inspector->toJson(); file_put_contents('flight.json', $json);
stringify()
public function stringify(int $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE): ?string
Convertit l'objet flight en JSON avec des options personnalisées.
Paramètres :
$flags: Options pourjson_encode()(défaut:JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
Retour : Représentation JSON de l'objet flight ou null
Exemple :
// JSON compact $json = $inspector->stringify(JSON_UNESCAPED_UNICODE); // JSON avec options personnalisées $json = $inspector->stringify(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);
validTurnPoint()
public function validTurnPoint(float $proximityRadius = 5000.0): bool
Valide les turnpoints en vérifiant la proximité des points GPS avec les waypoints de la tâche.
Paramètres :
$proximityRadius: Distance en mètres pour valider la proximité d'un turnpoint (défaut: 5000 m)
Retour : true si tous les turnpoints sont validés dans l'ordre
Exemple :
if ($inspector->validTurnPoint(5000.0)) { echo "Tous les turnpoints sont validés !"; $task = $inspector->getFlight()->Task; $validation = $task->turnPointValidation; echo "Points validés : " . $validation->validatedCount . " / " . $validation->totalWaypoints; }
rawExtract()
public function rawExtract(string $outputDirectory, ?string $prefix = null): array
Extrait chaque type d'enregistrement dans un fichier séparé.
Paramètres :
$outputDirectory: Répertoire de sortie pour les fichiers extraits$prefix: Préfixe pour les noms de fichiers (optionnel)
Retour : Tableau associatif avec le type d'enregistrement comme clé et le chemin du fichier comme valeur
Lance : \RuntimeException si le répertoire ne peut pas être créé ou si l'écriture échoue
Exemple :
$files = $inspector->rawExtract('./extracted', 'mon_vol'); foreach ($files as $type => $filepath) { echo "Type $type extrait dans : $filepath\n"; }
API - Classe PhpIgcUtils
Classe utilitaire contenant des fonctions statiques pour les opérations courantes sur les fichiers IGC.
Calcul de distances GPS
calculateDistance()
public static function calculateDistance( float $latitude1, float $longitude1, float $latitude2, float $longitude2 ): float
Calcule la distance entre deux points GPS en utilisant la formule de Haversine.
Paramètres :
$latitude1,$longitude1: Coordonnées du premier point (degrés décimaux)$latitude2,$longitude2: Coordonnées du deuxième point (degrés décimaux)
Retour : Distance en mètres
Exemple :
$distance = PhpIgcUtils::calculateDistance(51.1883, -1.0285, 51.2000, -1.0400); echo "Distance : " . round($distance, 2) . " mètres";
calculateProximity()
public static function calculateProximity( float $latitude1, float $longitude1, float $latitude2, float $longitude2 ): float
Alias pour calculateDistance().
Conversions de coordonnées
igcToDecimal()
public static function igcToDecimal(int $degrees, int $minutes, int $thousandths): float
Convertit des coordonnées IGC (DDMMmmm) en degrés décimaux.
Paramètres :
$degrees: Degrés (DD ou DDD)$minutes: Minutes (MM)$thousandths: Millièmes de minute (mmm)
Retour : Coordonnée en degrés décimaux
Exemple :
// Latitude : 51° 11.299' = 5111299 $latitude = PhpIgcUtils::igcToDecimal(51, 11, 299); // Retourne : 51.1883
decimalToIgc()
public static function decimalToIgc(float $decimalDegrees, bool $isLongitude = false): array
Convertit des degrés décimaux en format IGC (DDMMmmm).
Paramètres :
$decimalDegrees: Coordonnée en degrés décimaux$isLongitude:truesi c'est une longitude (DDDMMmmm),falsepour latitude (DDMMmmm)
Retour : Tableau avec degrees, minutes, thousandths
Exemple :
$coords = PhpIgcUtils::decimalToIgc(51.1883, false); // Retourne : ['degrees' => 51, 'minutes' => 11, 'thousandths' => 299]
Conversions de temps
secondsToTime()
public static function secondsToTime(int $seconds): string
Convertit des secondes en format hh:mm:ss.
Paramètres :
$seconds: Nombre de secondes
Retour : Temps formaté (hh:mm:ss)
Exemple :
$time = PhpIgcUtils::secondsToTime(9332); // Retourne : "02:35:32"
timeToSeconds()
public static function timeToSeconds(string $timeString): int
Convertit un temps formaté (hh:mm:ss ou HHMMSS) en secondes.
Paramètres :
$timeString: Temps au format hh:mm:ss ou HHMMSS
Retour : Nombre de secondes
Exemple :
$seconds = PhpIgcUtils::timeToSeconds("02:35:32"); // Retourne : 9332 $seconds = PhpIgcUtils::timeToSeconds("023532"); // Retourne : 9332
Formatage
formatDistance()
public static function formatDistance(float $distance, int $decimals = 2): string
Formate une distance en mètres avec unité (m ou km).
Paramètres :
$distance: Distance en mètres$decimals: Nombre de décimales (défaut: 2)
Retour : Distance formatée (ex: "125.43 km" ou "45.67 m")
Exemple :
$formatted = PhpIgcUtils::formatDistance(125430); // Retourne : "125.43 km" $formatted = PhpIgcUtils::formatDistance(456.7); // Retourne : "456.70 m"
formatSpeed()
public static function formatSpeed(float $speed, int $decimals = 2): string
Formate une vitesse en km/h.
Paramètres :
$speed: Vitesse en km/h$decimals: Nombre de décimales (défaut: 2)
Retour : Vitesse formatée (ex: "125.43 km/h")
Exemple :
$formatted = PhpIgcUtils::formatSpeed(125.5); // Retourne : "125.50 km/h"
Calculs
calculateSpeed()
public static function calculateSpeed( float $latitude1, float $longitude1, int $timestamp1, float $latitude2, float $longitude2, int $timestamp2 ): ?float
Calcule la vitesse entre deux points GPS.
Paramètres :
$latitude1,$longitude1: Coordonnées du premier point$timestamp1: Timestamp du premier point$latitude2,$longitude2: Coordonnées du deuxième point$timestamp2: Timestamp du deuxième point
Retour : Vitesse en km/h, ou null si le temps est invalide
Exemple :
$speed = PhpIgcUtils::calculateSpeed( 51.1883, -1.0285, 1659692972, 51.2000, -1.0400, 1659693000 ); // Retourne la vitesse en km/h
validatePointsProximity()
public static function validatePointsProximity( array $points, float $distance, string $igcContent, bool $includeIgcObject = false ): object
Valide une liste de points en vérifiant s'ils sont passés à proximité dans un fichier IGC.
Paramètres :
$points: Liste de points à valider. Chaque point doit être un objet ou un tableau associatif contenant les cléslatitudeetlongitude(en degrés décimaux)$distance: Distance maximale en mètres pour considérer qu'un point est validé$igcContent: Contenu du fichier IGC à analyser$includeIgcObject: Sitrue, inclut l'objet IGC parsé dans le résultat (défaut:false)
Retour : Objet contenant :
validatedPoints: Tableau des points validés avec leurs détailsinvalidatedPoints: Tableau des points non validésallValidated: Booléen indiquant si tous les points sont validésvalidatedCount: Nombre de points validéstotalPoints: Nombre total de pointsdistance: Distance maximale utilisée pour la validationigcObject: Objet IGC parsé (uniquement si$includeIgcObjectesttrue)
Lance : \Exception si le fichier IGC ne peut pas être parsé ou si les points sont invalides
Exemple :
$points = [ ['latitude' => 51.1883, 'longitude' => -1.0285], ['latitude' => 51.2000, 'longitude' => -1.0400], ]; $igcContent = file_get_contents('vol.igc'); $result = PhpIgcUtils::validatePointsProximity($points, 5000.0, $igcContent); if ($result->allValidated) { echo "Tous les points sont validés !\n"; } else { echo "Points validés : " . $result->validatedCount . " / " . $result->totalPoints . "\n"; foreach ($result->invalidatedPoints as $point) { echo "Point non validé : " . $point->reason . "\n"; } } // Avec l'objet IGC inclus $result = PhpIgcUtils::validatePointsProximity($points, 5000.0, $igcContent, true); $flight = $result->igcObject; // Objet flight complet
Exemples complets
Exemple 1 : Lecture et validation d'un fichier IGC
use Ycdev\PhpIgcInspector\PhpIgcInspector; use Ycdev\PhpIgcInspector\Exception\InvalidIgcException; try { $inspector = PhpIgcInspector::fromFile('vol.igc'); $inspector->validate(); $flight = $inspector->getFlight(); echo "Pilote : " . $flight->OtherInformation->pilot . "\n"; echo "Date : " . $flight->OtherInformation->date . "\n"; echo "Nombre de points GPS : " . count($flight->Fix) . "\n"; echo "Distance totale : " . $flight->OtherInformation->totalDistanceFormatted . "\n"; echo "Durée : " . $flight->OtherInformation->flightDurationFormatted . "\n"; } catch (InvalidIgcException $e) { echo "Erreur de validation : " . $e->getMessage() . "\n"; }
Exemple 2 : Validation des turnpoints
$inspector = PhpIgcInspector::fromFile('vol.igc'); $inspector->validate(); if ($inspector->validTurnPoint(5000.0)) { $task = $inspector->getFlight()->Task; $validation = $task->turnPointValidation; echo "Tous les turnpoints sont validés !\n"; echo "Points validés : " . $validation->validatedCount . " / " . $validation->totalWaypoints . "\n"; foreach ($validation->validatedTurnPoints as $turnPoint) { echo sprintf( "Turnpoint %d (%s) validé à %s (distance: %.2f m)\n", $turnPoint->index, $turnPoint->type, $turnPoint->validatedAt, $turnPoint->distance ); } } else { echo "Certains turnpoints n'ont pas été validés.\n"; foreach ($validation->missedTurnPoints as $missed) { echo "Turnpoint manqué : " . $missed->type . " (index " . $missed->index . ")\n"; } }
Exemple 3 : Calcul de distance entre deux points
use Ycdev\PhpIgcInspector\PhpIgcUtils; $distance = PhpIgcUtils::calculateDistance( 51.1883, // Latitude point 1 -1.0285, // Longitude point 1 51.2000, // Latitude point 2 -1.0400 // Longitude point 2 ); echo "Distance : " . PhpIgcUtils::formatDistance($distance) . "\n";
Exemple 4 : Validation de points personnalisés
use Ycdev\PhpIgcInspector\PhpIgcUtils; // Liste de points à valider (waypoints personnalisés) $waypoints = [ ['latitude' => 51.1883, 'longitude' => -1.0285, 'name' => 'Départ'], ['latitude' => 51.2000, 'longitude' => -1.0400, 'name' => 'Turnpoint 1'], ['latitude' => 51.2100, 'longitude' => -1.0500, 'name' => 'Arrivée'], ]; $igcContent = file_get_contents('vol.igc'); $result = PhpIgcUtils::validatePointsProximity($waypoints, 5000.0, $igcContent); echo "Résultats de validation :\n"; echo "Points validés : " . $result->validatedCount . " / " . $result->totalPoints . "\n"; echo "Distance maximale : " . PhpIgcUtils::formatDistance($result->distance) . "\n"; foreach ($result->validatedPoints as $point) { echo sprintf( "✓ Point validé (distance: %.2f m) à %s\n", $point->minDistance, $point->validatedAt ?? 'N/A' ); } foreach ($result->invalidatedPoints as $point) { echo sprintf( "✗ Point non validé : %s (distance min: %s)\n", $point->reason, $point->minDistance !== null ? PhpIgcUtils::formatDistance($point->minDistance) : 'N/A' ); }
Développement
- Namespace :
Ycdev\PhpIgcInspector - License : GPL-3.0-only
- Version PHP requise : >= 7.4
Auteur
Yann (yann@cymdev.com)
ycdev/php-igc-inspector 适用场景与选型建议
ycdev/php-igc-inspector 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「parser」 「gps」 「flight」 「aviation」 「igc」 「gliding」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 ycdev/php-igc-inspector 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 ycdev/php-igc-inspector 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 ycdev/php-igc-inspector 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Google Maps based picker of coordinates for Nette Framework.
Easy to use SDK with grabber for multiple platforms at once like YouTube, Dailymotion, Facebook and more.
This Bundle provides a wrapper for the FlightStats API
PHP Library for parsing running GPS activities and calculating metrics
Google Maps based picker of coordinates for Nette Framework.
An MT940 bank statement parser for PHP
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 23
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: GPL-3.0-only
- 更新时间: 2026-01-12