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; ?> NetMonster Admin - Recherche antenne

Recherche antenne / eNB

Recherchez un eNB, une cellule, une bande, une frequence ou une adresse. Les secteurs avec azimut sont dessines sur la carte.

Antennes trouvees ()

Saisissez un eNB, un Cell ID, une bande ou une adresse.
Aucune antenne trouvee.

Cellules de l'antenne

—

TechnoCell IDeNB/RNCBandeFrequenceLargeurAzimutARFCN

Carte des azimuts