query('SELECT id, iso2, name FROM countries ORDER BY name')->fetchAll(PDO::FETCH_ASSOC); $operators = $db->query('SELECT id, mcc, mnc, brand FROM operators ORDER BY brand')->fetchAll(PDO::FETCH_ASSOC); $sites = []; $selectedSite = null; $selectedCells = []; if ($query !== '' || $countryFilter !== '' || $operatorFilter !== '' || $techFilter !== '' || $selectedSiteId > 0) { $sql = ' SELECT s.id AS site_id, s.lat, s.lon, s.location_desc, s.address_desc, s.country_id, s.operator_id, o.brand AS operator_brand, o.mcc AS operator_mcc, o.mnc AS operator_mnc, c.name AS country_name, cl.id AS cell_pk, cl.mcc, cl.mnc, cl.tech, cl.cell_id, cl.area_code, cl.sub_id, cl.sub_id2, cl.band, cl.frequency, cl.azimuth, cl.bandwidth, cl.arfcn FROM sites s JOIN operators o ON o.id = s.operator_id JOIN countries c ON c.id = s.country_id JOIN cells cl ON cl.site_id = s.id WHERE 1=1 '; $params = []; if ($query !== '') { $sql .= ' AND ( cl.sub_id2 LIKE ? OR cl.cell_id LIKE ? OR cl.sub_id LIKE ? OR cl.band LIKE ? OR cl.frequency LIKE ? OR s.location_desc LIKE ? OR s.address_desc LIKE ? ) '; $like = '%' . $query . '%'; array_push($params, $like, $like, $like, $like, $like, $like, $like); } if ($countryFilter !== '') { $sql .= ' AND c.iso2 = ?'; $params[] = $countryFilter; } if ($operatorFilter !== '') { $sql .= ' AND o.id = ?'; $params[] = (int)$operatorFilter; } if ($techFilter !== '') { $sql .= ' AND cl.tech = ?'; $params[] = $techFilter; } if ($selectedSiteId > 0) { $sql .= ' AND s.id = ?'; $params[] = $selectedSiteId; } $sql .= ' ORDER BY s.id, cl.sub_id2, cl.tech, cl.band, cl.frequency, cl.id LIMIT 1000'; $stmt = $db->prepare($sql); $stmt->execute($params); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { $siteId = (int)$row['site_id']; if (!isset($sites[$siteId])) { $sites[$siteId] = [ 'site_id' => $siteId, 'lat' => (float)$row['lat'], 'lon' => (float)$row['lon'], 'location_desc' => (string)($row['location_desc'] ?? ''), 'address_desc' => (string)($row['address_desc'] ?? ''), 'operator_brand' => (string)$row['operator_brand'], 'country_name' => (string)$row['country_name'], 'cell_count' => 0, 'cells' => [], ]; } $cell = [ 'cell_pk' => (int)$row['cell_pk'], 'mcc' => (string)($row['mcc'] ?? ''), 'mnc' => (string)($row['mnc'] ?? ''), 'tech' => (string)($row['tech'] ?? ''), 'cell_id' => (string)($row['cell_id'] ?? ''), 'area_code' => (string)($row['area_code'] ?? ''), 'sub_id' => (string)($row['sub_id'] ?? ''), 'sub_id2' => (string)($row['sub_id2'] ?? ''), 'band' => (string)($row['band'] ?? ''), 'frequency' => (string)($row['frequency'] ?? ''), 'azimuth' => $row['azimuth'] !== null && $row['azimuth'] !== '' ? (float)$row['azimuth'] : null, 'bandwidth' => (string)($row['bandwidth'] ?? ''), 'arfcn' => (string)($row['arfcn'] ?? ''), ]; $sites[$siteId]['cells'][] = $cell; $sites[$siteId]['cell_count']++; } $sites = array_values($sites); if ($selectedSiteId > 0 && isset($sites[0]) && (int)$sites[0]['site_id'] === $selectedSiteId) { $selectedSite = $sites[0]; $selectedCells = $selectedSite['cells']; } elseif (count($sites) === 1) { $selectedSite = $sites[0]; $selectedCells = $selectedSite['cells']; } } function h(mixed $value): string { return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8'); } function techColor(string $tech): string { return match (strtoupper($tech)) { '2G' => '#eab308', '3G' => '#2563eb', '4G' => '#16a34a', '5G' => '#9333ea', 'CDMA' => '#ea580c', default => '#64748b', }; } $mapSites = $selectedSite ? [$selectedSite] : $sites; ?>
Recherchez un eNB, une cellule, une bande, une frequence ou une adresse. Les secteurs avec azimut sont dessines sur la carte.
= h($selectedSite['operator_brand']) ?> — = h($selectedSite['address_desc'] ?: $selectedSite['location_desc']) ?>
| Techno | Cell ID | eNB/RNC | Bande | Frequence | Largeur | Azimut | ARFCN |
|---|---|---|---|---|---|---|---|
| = h($cell['tech']) ?> | = h($cell['cell_id']) ?> | = h($cell['sub_id2']) ?> | = h($cell['band']) ?> | = h($cell['frequency']) ?> | = h($cell['bandwidth']) ?> | = $cell['azimuth'] === null ? '—' : h(rtrim(rtrim(number_format((float)$cell['azimuth'], 2, '.', ''), '0'), '.')) . '°' ?> | = h($cell['arfcn']) ?> |