From cebe4966170ecd83aadb62a77a97d06fb6b4c849 Mon Sep 17 00:00:00 2001 From: Karl Determe Date: Fri, 9 Oct 2026 13:17:49 +0200 Subject: [PATCH] feat: add seed command and fixture for Schuman bollards and CCTV cameras --- .../commands/seed_schuman_bollards.py | 517 ++++++++++++++++++ .../fixtures/schuman_bollards_assets.geojson | 511 +++++++++++++++++ 2 files changed, 1028 insertions(+) create mode 100644 loko/assets/management/commands/seed_schuman_bollards.py create mode 100644 loko/common/fixtures/schuman_bollards_assets.geojson diff --git a/loko/assets/management/commands/seed_schuman_bollards.py b/loko/assets/management/commands/seed_schuman_bollards.py new file mode 100644 index 0000000..91b7b8c --- /dev/null +++ b/loko/assets/management/commands/seed_schuman_bollards.py @@ -0,0 +1,517 @@ +""" +Management command to seed the 11 Bollard Installations (ITSBollardSystem) +and 8 CCTV Cameras (ITSGeoAsset) at Rond-point Schuman and Korte Wetstraat, +based on the official POLBRU-approved plan from 'draft_fiche reflex bollards Schuman_20261006.docx'. +""" + +import json +from django.core.management.base import BaseCommand +from django.contrib.gis.geos import LineString, Point, Polygon, MultiPolygon +from django.db import transaction +from django.contrib.contenttypes.models import ContentType + +from common.models import Thematic +from assets.models import ( + AssetCategory, + ITSAssetModel, + ITSLocation, + ITSGeoAsset, + ITSBollardSystem, + ITSBollardSystemAsset, +) + + +class Command(BaseCommand): + help = "Crée ou met à jour les 11 installations de bollards et les 8 caméras CCTV du rond-point Schuman." + + def add_arguments(self, parser): + parser.add_argument( + '--dry-run', + action='store_true', + help="Simule l'exécution sans enregistrer en base de données.", + ) + parser.add_argument( + '--export-geojson', + type=str, + help="Exporte les entités générées dans un fichier GeoJSON (ex: schuman_assets.geojson).", + ) + + def handle(self, *args, **options): + dry_run = options.get('dry_run', False) + geojson_path = options.get('export_geojson') + + self.stdout.write(self.style.MIGRATE_HEADING("=== Déploiement des Assets Bollards & CCTV Schuman ===")) + + if dry_run: + self.stdout.write(self.style.WARNING("[ATTENTION] Mode DRY-RUN actif : aucune modification ne sera enregistree en base.")) + + # --------------------------------------------------------- + # 1. Données de référence géographiques et attributaires + # --------------------------------------------------------- + # SRID: 3812 (Belgian Lambert 2008) + bollards_data = [ + { + "code": "WET_235", + "name_fr": "Bornes Schuman - Korte Wetstraat n°235", + "name_nl": "Verzinkbare palen Schuman - Korte Wetstraat nr. 235", + "direction": "unidirectional", + "width": 5.0, + "coords_3812": [(651198.5, 670158.0), (651201.5, 670163.0)], + "description": "Voie sud Korte Wetstraat face au n°235 en direction du Cinquantenaire", + "plots_count": 2, + }, + { + "code": "WET_SIAMU", + "name_fr": "Bornes Schuman - Korte Wetstraat SIAMU", + "name_nl": "Verzinkbare palen Schuman - Korte Wetstraat SIAMU", + "direction": "bidirectional", + "width": 7.5, + "coords_3812": [(651165.0, 670172.5), (651168.5, 670180.0)], + "description": "Voie nord Korte Wetstraat (accès prioritaire secours SIAMU)", + "plots_count": 4, + }, + { + "code": "EEAS_INT", + "name_fr": "Bornes Schuman - EEAS Intérieur", + "name_nl": "Verzinkbare palen Schuman - EED Binnen", + "direction": "bidirectional", + "width": 6.0, + "coords_3812": [(651090.0, 670222.0), (651090.0, 670228.0)], + "description": "Esplanade piétonne est, traverse intérieure près de la canopée", + "plots_count": 2, + }, + { + "code": "EEAS_EXT", + "name_fr": "Bornes Schuman - EEAS Extérieur", + "name_nl": "Verzinkbare palen Schuman - EED Buiten", + "direction": "bidirectional", + "width": 6.0, + "coords_3812": [(651125.0, 670222.0), (651125.0, 670228.0)], + "description": "Esplanade piétonne est, traverse extérieure face au bâtiment Capital / EEAS", + "plots_count": 2, + }, + { + "code": "BERL_EXT", + "name_fr": "Bornes Schuman - Berlaymont Extérieur", + "name_nl": "Verzinkbare palen Schuman - Berlaymont Buiten", + "direction": "unidirectional", + "width": 8.0, + "coords_3812": [(650936.0, 670273.0), (650933.0, 670281.0)], + "description": "Chaussée sortie Schuman vers Rue de la Loi direction centre (traverse extérieure)", + "plots_count": 4, + }, + { + "code": "BERL_INT", + "name_fr": "Bornes Schuman - Berlaymont Intérieur", + "name_nl": "Verzinkbare palen Schuman - Berlaymont Binnen", + "direction": "unidirectional", + "width": 8.0, + "coords_3812": [(650956.0, 670267.0), (650953.0, 670275.0)], + "description": "Chaussée sortie Schuman vers Rue de la Loi direction centre (traverse intérieure)", + "plots_count": 4, + }, + { + "code": "FROI_OUT", + "name_fr": "Bornes Schuman - Froissart Sortie", + "name_nl": "Verzinkbare palen Schuman - Froissart Uitrit", + "direction": "unidirectional", + "width": 4.5, + "coords_3812": [(651027.0, 670185.0), (651031.0, 670183.0)], + "description": "Voie de sortie du rond-point vers la Rue Froissart (voie ouest)", + "plots_count": 2, + }, + { + "code": "FROI_IN", + "name_fr": "Bornes Schuman - Froissart Entrée", + "name_nl": "Verzinkbare palen Schuman - Froissart Inrit", + "direction": "unidirectional", + "width": 4.5, + "coords_3812": [(651032.5, 670189.0), (651036.5, 670186.5)], + "description": "Voie d'entrée dans le rond-point depuis la Rue Froissart (voie est)", + "plots_count": 2, + }, + { + "code": "OUD_OUT", + "name_fr": "Bornes Schuman - Auderghem Sortie", + "name_nl": "Verzinkbare palen Schuman - Oudergem Uitrit", + "direction": "unidirectional", + "width": 4.5, + "coords_3812": [(651082.0, 670160.0), (651086.0, 670161.5)], + "description": "Voie de sortie du rond-point vers l'Avenue d'Auderghem (voie ouest)", + "plots_count": 2, + }, + { + "code": "OUD_IN", + "name_fr": "Bornes Schuman - Auderghem Entrée", + "name_nl": "Verzinkbare palen Schuman - Oudergem Inrit", + "direction": "unidirectional", + "width": 4.5, + "coords_3812": [(651087.5, 670161.8), (651092.0, 670163.5)], + "description": "Voie d'entrée dans le rond-point depuis l'Avenue d'Auderghem (voie est)", + "plots_count": 2, + }, + { + "code": "J_LIPS", + "name_fr": "Bornes Schuman - Justus Lipsius", + "name_nl": "Verzinkbare palen Schuman - Justus Lipsius", + "direction": "bidirectional", + "width": 5.5, + "coords_3812": [(650996.0, 670226.0), (651000.0, 670231.0)], + "description": "Esplanade piétonne ouest en face du bâtiment Justus Lipsius", + "plots_count": 2, + }, + ] + + cameras_data = [ + { + "code": "CAM-N23-BLIJDE-INKOMSTEN", + "name_fr": "CCTV N23 - Blijde Inkomsten", + "name_nl": "CCTV N23 - Blijde Inkomst", + "coords_3812": (651218.0, 670163.0), + "target_systems": ["WET_235", "WET_SIAMU"], + "description": "Caméra CCTV carrefour N23 / Blijde Inkomst avec vue sur bollards WET_235 et WET_SIAMU", + }, + { + "code": "CAM-SCHUMAN-EEAS", + "name_fr": "CCTV Schuman - EEAS", + "name_nl": "CCTV Schuman - EED", + "coords_3812": (651085.0, 670215.0), + "target_systems": ["EEAS_INT", "EEAS_EXT"], + "description": "Caméra CCTV esplanade est avec vue sur bollards EEAS_INT et EEAS_EXT", + }, + { + "code": "CAM-SCHUMAN-BERLAYMONT", + "name_fr": "CCTV Schuman - Berlaymont", + "name_nl": "CCTV Schuman - Berlaymont", + "coords_3812": (650965.0, 670260.0), + "target_systems": ["BERL_INT", "BERL_EXT"], + "description": "Caméra CCTV nord-ouest avec vue sur bollards BERL_INT et BERL_EXT", + }, + { + "code": "CAM-SCHUMAN-LIPSIUS", + "name_fr": "CCTV Schuman - Lipsius", + "name_nl": "CCTV Schuman - Lipsius", + "coords_3812": (650995.0, 670223.0), + "target_systems": ["J_LIPS"], + "description": "Caméra CCTV ouest avec vue sur bollards J_LIPS (Justus Lipsius)", + }, + { + "code": "CAM-SCHUMAN-FROISSART", + "name_fr": "CCTV Schuman - Froissart", + "name_nl": "CCTV Schuman - Froissart", + "coords_3812": (651040.0, 670198.0), + "target_systems": ["FROI_IN", "FROI_OUT"], + "description": "Caméra CCTV sud-ouest avec vue sur bollards FROI_IN et FROI_OUT", + }, + { + "code": "CAM-SCHUMAN-OUDERGEM", + "name_fr": "CCTV Schuman - Oudergem", + "name_nl": "CCTV Schuman - Oudergem", + "coords_3812": (651082.0, 670190.0), + "target_systems": ["OUD_IN", "OUD_OUT"], + "description": "Caméra CCTV sud avec vue sur bollards OUD_IN et OUD_OUT", + }, + { + "code": "CAM-SCHUMAN-KORTENBERG", + "name_fr": "CCTV Schuman - Kortenberg", + "name_nl": "CCTV Schuman - Kortenberg", + "coords_3812": (651095.0, 670250.0), + "target_systems": [], + "description": "Caméra CCTV nord-est avec vue sur l'Avenue de Cortenbergh / Kortenberglaan", + }, + { + "code": "CAM-SCHUMAN-KLEINE-WETSTRAAT", + "name_fr": "CCTV Schuman - Kleine Wetstraat", + "name_nl": "CCTV Schuman - Korte Wetstraat", + "coords_3812": (651105.0, 670205.0), + "target_systems": ["WET_SIAMU", "WET_235"], + "description": "Caméra CCTV est avec vue sur la Korte Wetstraat vers l'est", + }, + ] + + # Export GeoJSON optionnel + if geojson_path: + self.export_geojson(bollards_data, cameras_data, geojson_path) + + if dry_run: + self.stdout.write(self.style.SUCCESS( + f"[OK] Simulation terminee : {len(bollards_data)} bollards et {len(cameras_data)} cameras verifies." + )) + return + + # --------------------------------------------------------- + # 2. Exécution des créations / mises à jour en DB + # --------------------------------------------------------- + with transaction.atomic(): + # A) Thématique ITS + thematic_its, _ = Thematic.objects.get_or_create( + code='its', + defaults={ + 'name_fr': 'Systèmes de Transport Intelligents (ITS)', + 'name_nl': 'Intelligente Transportsystemen (ITS)', + } + ) + + # B) Catégories d'assets + ct_bollard_system = ContentType.objects.get_for_model(ITSBollardSystem) + ct_geo_asset = ContentType.objects.get_for_model(ITSGeoAsset) + + cat_bollards, _ = AssetCategory.objects.update_or_create( + code='ITS_BOLLARDS', + defaults={ + 'name_fr': 'Systèmes de bornes escamotables', + 'name_nl': 'Verzinkbare palen systemen', + 'thematic': thematic_its, + } + ) + cat_bollards.allowed_models.add(ct_bollard_system) + + cat_cctv, _ = AssetCategory.objects.update_or_create( + code='ITS_CCTV', + defaults={ + 'name_fr': 'Caméras de surveillance (CCTV)', + 'name_nl': "CCTV-bewakingscamera's", + 'thematic': thematic_its, + } + ) + cat_cctv.allowed_models.add(ct_geo_asset) + + # C) Modèles de matériel (ITSAssetModel) + model_bollards, _ = ITSAssetModel.objects.update_or_create( + code='MODEL_BOLLARD_SYSTEM_SCHUMAN', + defaults={ + 'name_fr': 'Système de bornes escamotables Schuman', + 'name_nl': 'Verzinkbare palen systeem Schuman', + 'brand': 'Lowist', + 'category': cat_bollards, + 'description': 'Système de bornes escamotables automatisées sur rail coulissant au sol (Beliris / Lowist).', + } + ) + + model_camera, _ = ITSAssetModel.objects.update_or_create( + code='MODEL_CCTV_CAMERA_SCHUMAN', + defaults={ + 'name_fr': 'Caméra CCTV Schuman (Genetec/MANBRU)', + 'name_nl': 'CCTV-camera Schuman (Genetec/MANBRU)', + 'brand': 'Genetec / MANBRU', + 'category': cat_cctv, + 'description': 'Caméra de vidéosurveillance urbaine haute définition connectée au réseau MANBRU.', + } + ) + + # D) Localisation ITS Schuman (ITSLocation) + # Périmètre Schuman sous forme de polygone Lambert 2008 + schuman_poly = Polygon(( + (650880.0, 670260.0), + (650940.0, 670310.0), + (651120.0, 670300.0), + (651260.0, 670180.0), + (651230.0, 670130.0), + (651070.0, 670140.0), + (651000.0, 670170.0), + (650880.0, 670260.0), + ), srid=3812) + schuman_multipoly = MultiPolygon([schuman_poly], srid=3812) + + loc_schuman, _ = ITSLocation.objects.update_or_create( + code='LOC-SCHUMAN', + defaults={ + 'name_fr': 'Rond-point Robert Schuman et Korte Wetstraat', + 'name_nl': 'Robert Schumanplein en Korte Wetstraat', + 'is_main_location': True, + 'geom': schuman_multipoly, + } + ) + self.stdout.write(f"[INFO] Localisation ITS prete : {loc_schuman}") + + # E) Création des 11 ITSBollardSystem + created_bollards = 0 + updated_bollards = 0 + bollard_system_objs = {} + + common_bollard_extra_data = { + "source": "draft_fiche reflex bollards Schuman_20261006.docx", + "contract_beliris": "2.1.1.2 - Réaménagement du rond-point Schuman et de ses abords", + "warranty_end_date": "2029-09-15", + "future_contract": "E26.174 (BM-ITS)", + "installer": "Lowist (Mathie Lowist, ml@lowist.be)", + "civil_works": "Colas (Glenn Verhasselt)", + "beliris_contact": "Fabian Bossut (fabian.bossut@mobilit.fgov.be)", + "software": "Centrigo (level 27)", + "whitelist_sync": "GDA (Ville de Bruxelles) -> Centrigo", + "monitoring": "Genetec / MANBRU", + "deviation_plan": "Signalisation de déviation + blocs de béton (Trafiroad)", + } + + for item in bollards_data: + geom_line = LineString(item['coords_3812'], srid=3812) + extra = dict(common_bollard_extra_data) + extra["centrigo_name"] = item["code"] + extra["plots_count"] = item.get("plots_count", 2) + extra["description"] = item["description"] + + system, created = ITSBollardSystem.objects.update_or_create( + code=item['code'], + defaults={ + 'name_fr': item['name_fr'], + 'name_nl': item['name_nl'], + 'external_reference': item['code'], + 'direction': item['direction'], + 'width': item['width'], + 'status': 'active', + 'validation_status': 'validated', + 'inspection_status': 'compliant', + 'category': cat_bollards, + 'model': model_bollards, + 'location': loc_schuman, + 'geom': geom_line, + 'extra_data': extra, + 'brand': 'Lowist', + } + ) + bollard_system_objs[item['code']] = system + if created: + created_bollards += 1 + else: + updated_bollards += 1 + + self.stdout.write(self.style.SUCCESS( + f"[OK] Systemes de bornes : {created_bollards} crees, {updated_bollards} mis a jour." + )) + + # F) Création des 8 Caméras CCTV (ITSGeoAsset) + created_cameras = 0 + updated_cameras = 0 + camera_objs = {} + + for cdata in cameras_data: + geom_pt = Point(cdata['coords_3812'], srid=3812) + c_extra = { + "source": "draft_fiche reflex bollards Schuman_20261006.docx", + "cctv_network": "MANBRU", + "vms": "Genetec", + "monitored_bollards": cdata['target_systems'], + "description": cdata['description'], + } + + cam, created = ITSGeoAsset.objects.update_or_create( + code=cdata['code'], + defaults={ + 'name_fr': cdata['name_fr'], + 'name_nl': cdata['name_nl'], + 'status': 'active', + 'validation_status': 'validated', + 'inspection_status': 'compliant', + 'category': cat_cctv, + 'model': model_camera, + 'location': loc_schuman, + 'geom': geom_pt, + 'extra_data': c_extra, + 'brand': 'Genetec / MANBRU', + } + ) + camera_objs[cdata['code']] = cam + if created: + created_cameras += 1 + else: + updated_cameras += 1 + + self.stdout.write(self.style.SUCCESS( + f"[OK] Cameras CCTV : {created_cameras} creees, {updated_cameras} mises a jour." + )) + + # G) Liaisons ManyToMany via ITSBollardSystemAsset + links_count = 0 + for cdata in cameras_data: + cam_obj = camera_objs[cdata['code']] + for bcode in cdata['target_systems']: + if bcode in bollard_system_objs: + b_obj = bollard_system_objs[bcode] + link, created = ITSBollardSystemAsset.objects.update_or_create( + bollard_system=b_obj, + asset=cam_obj, + defaults={ + 'role': ITSBollardSystemAsset.AssetRole.CAMERA_CCTV, + 'comment': f"Vue CCTV {cdata['name_fr']} vers {bcode}", + } + ) + links_count += 1 + + self.stdout.write(self.style.SUCCESS( + f"[OK] Associations Cameras <-> Systemes de bornes : {links_count} associations actives." + )) + + self.stdout.write(self.style.SUCCESS("[SUCCES] Deploiement des assets Schuman termine avec succes !")) + + def export_geojson(self, bollards_data, cameras_data, output_path): + """ + Exporte les données en un FeatureCollection GeoJSON (WGS84). + """ + from pyproj import Transformer + t = Transformer.from_crs("EPSG:3812", "EPSG:4326", always_xy=True) + + features = [] + + # Bollards (LineString) + for b in bollards_data: + c1 = t.transform(b['coords_3812'][0][0], b['coords_3812'][0][1]) + c2 = t.transform(b['coords_3812'][1][0], b['coords_3812'][1][1]) + features.append({ + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [round(c1[0], 7), round(c1[1], 7)], + [round(c2[0], 7), round(c2[1], 7)] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": b["code"], + "name_fr": b["name_fr"], + "name_nl": b["name_nl"], + "direction": b["direction"], + "width_m": b["width"], + "plots_count": b["plots_count"], + "description": b["description"], + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }) + + # Caméras (Point) + for c in cameras_data: + pt = t.transform(c['coords_3812'][0], c['coords_3812'][1]) + features.append({ + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [round(pt[0], 7), round(pt[1], 7)] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": c["code"], + "name_fr": c["name_fr"], + "name_nl": c["name_nl"], + "target_bollards": c["target_systems"], + "description": c["description"], + "network": "MANBRU", + "vms": "Genetec" + } + }) + + geojson = { + "type": "FeatureCollection", + "name": "Schuman_Bollards_and_CCTV", + "crs": { + "type": "name", + "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"} + }, + "features": features + } + + with open(output_path, 'w', encoding='utf-8') as f: + json.dump(geojson, f, indent=2, ensure_ascii=False) + + self.stdout.write(self.style.SUCCESS(f"[OK] Fichier GeoJSON exporte avec succes : {output_path}")) diff --git a/loko/common/fixtures/schuman_bollards_assets.geojson b/loko/common/fixtures/schuman_bollards_assets.geojson new file mode 100644 index 0000000..0e3d6c7 --- /dev/null +++ b/loko/common/fixtures/schuman_bollards_assets.geojson @@ -0,0 +1,511 @@ +{ + "type": "FeatureCollection", + "name": "Schuman_Bollards_and_CCTV", + "crs": { + "type": "name", + "properties": { + "name": "urn:ogc:def:crs:OGC:1.3:CRS84" + } + }, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3857731, + 50.8418253 + ], + [ + 4.3858158, + 50.8418703 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "WET_235", + "name_fr": "Bornes Schuman - Korte Wetstraat n°235", + "name_nl": "Verzinkbare palen Schuman - Korte Wetstraat nr. 235", + "direction": "unidirectional", + "width_m": 5.0, + "plots_count": 2, + "description": "Voie sud Korte Wetstraat face au n°235 en direction du Cinquantenaire", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3852976, + 50.8419558 + ], + [ + 4.3853473, + 50.8420232 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "WET_SIAMU", + "name_fr": "Bornes Schuman - Korte Wetstraat SIAMU", + "name_nl": "Verzinkbare palen Schuman - Korte Wetstraat SIAMU", + "direction": "bidirectional", + "width_m": 7.5, + "plots_count": 4, + "description": "Voie nord Korte Wetstraat (accès prioritaire secours SIAMU)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.384233, + 50.842401 + ], + [ + 4.384233, + 50.8424549 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "EEAS_INT", + "name_fr": "Bornes Schuman - EEAS Intérieur", + "name_nl": "Verzinkbare palen Schuman - EED Binnen", + "direction": "bidirectional", + "width_m": 6.0, + "plots_count": 2, + "description": "Esplanade piétonne est, traverse intérieure près de la canopée", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3847299, + 50.8424009 + ], + [ + 4.3847299, + 50.8424548 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "EEAS_EXT", + "name_fr": "Bornes Schuman - EEAS Extérieur", + "name_nl": "Verzinkbare palen Schuman - EED Buiten", + "direction": "bidirectional", + "width_m": 6.0, + "plots_count": 2, + "description": "Esplanade piétonne est, traverse extérieure face au bâtiment Capital / EEAS", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3820467, + 50.8428599 + ], + [ + 4.3820041, + 50.8429318 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "BERL_EXT", + "name_fr": "Bornes Schuman - Berlaymont Extérieur", + "name_nl": "Verzinkbare palen Schuman - Berlaymont Buiten", + "direction": "unidirectional", + "width_m": 8.0, + "plots_count": 4, + "description": "Chaussée sortie Schuman vers Rue de la Loi direction centre (traverse extérieure)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3823306, + 50.8428059 + ], + [ + 4.3822881, + 50.8428778 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "BERL_INT", + "name_fr": "Bornes Schuman - Berlaymont Intérieur", + "name_nl": "Verzinkbare palen Schuman - Berlaymont Binnen", + "direction": "unidirectional", + "width_m": 8.0, + "plots_count": 4, + "description": "Chaussée sortie Schuman vers Rue de la Loi direction centre (traverse intérieure)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3833383, + 50.8420686 + ], + [ + 4.3833951, + 50.8420506 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "FROI_OUT", + "name_fr": "Bornes Schuman - Froissart Sortie", + "name_nl": "Verzinkbare palen Schuman - Froissart Uitrit", + "direction": "unidirectional", + "width_m": 4.5, + "plots_count": 2, + "description": "Voie de sortie du rond-point vers la Rue Froissart (voie ouest)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3834164, + 50.8421045 + ], + [ + 4.3834732, + 50.842082 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "FROI_IN", + "name_fr": "Bornes Schuman - Froissart Entrée", + "name_nl": "Verzinkbare palen Schuman - Froissart Inrit", + "direction": "unidirectional", + "width_m": 4.5, + "plots_count": 2, + "description": "Voie d'entrée dans le rond-point depuis la Rue Froissart (voie est)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3841191, + 50.8418437 + ], + [ + 4.3841759, + 50.8418571 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "OUD_OUT", + "name_fr": "Bornes Schuman - Auderghem Sortie", + "name_nl": "Verzinkbare palen Schuman - Oudergem Uitrit", + "direction": "unidirectional", + "width_m": 4.5, + "plots_count": 2, + "description": "Voie de sortie du rond-point vers l'Avenue d'Auderghem (voie ouest)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3841972, + 50.8418598 + ], + [ + 4.3842611, + 50.8418751 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "OUD_IN", + "name_fr": "Bornes Schuman - Auderghem Entrée", + "name_nl": "Verzinkbare palen Schuman - Oudergem Inrit", + "direction": "unidirectional", + "width_m": 4.5, + "plots_count": 2, + "description": "Voie d'entrée dans le rond-point depuis l'Avenue d'Auderghem (voie est)", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.3828984, + 50.8424372 + ], + [ + 4.3829552, + 50.8424822 + ] + ] + }, + "properties": { + "asset_type": "ITSBollardSystem", + "code": "J_LIPS", + "name_fr": "Bornes Schuman - Justus Lipsius", + "name_nl": "Verzinkbare palen Schuman - Justus Lipsius", + "direction": "bidirectional", + "width_m": 5.5, + "plots_count": 2, + "description": "Esplanade piétonne ouest en face du bâtiment Justus Lipsius", + "installer": "Lowist", + "contract": "Beliris 2.1.1.2", + "warranty_end": "2029-09-15" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.38605, + 50.8418702 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-N23-BLIJDE-INKOMSTEN", + "name_fr": "CCTV N23 - Blijde Inkomsten", + "name_nl": "CCTV N23 - Blijde Inkomst", + "target_bollards": [ + "WET_235", + "WET_SIAMU" + ], + "description": "Caméra CCTV carrefour N23 / Blijde Inkomst avec vue sur bollards WET_235 et WET_SIAMU", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.384162, + 50.8423381 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-EEAS", + "name_fr": "CCTV Schuman - EEAS", + "name_nl": "CCTV Schuman - EED", + "target_bollards": [ + "EEAS_INT", + "EEAS_EXT" + ], + "description": "Caméra CCTV esplanade est avec vue sur bollards EEAS_INT et EEAS_EXT", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.3824584, + 50.842743 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-BERLAYMONT", + "name_fr": "CCTV Schuman - Berlaymont", + "name_nl": "CCTV Schuman - Berlaymont", + "target_bollards": [ + "BERL_INT", + "BERL_EXT" + ], + "description": "Caméra CCTV nord-ouest avec vue sur bollards BERL_INT et BERL_EXT", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.3828842, + 50.8424103 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-LIPSIUS", + "name_fr": "CCTV Schuman - Lipsius", + "name_nl": "CCTV Schuman - Lipsius", + "target_bollards": [ + "J_LIPS" + ], + "description": "Caméra CCTV ouest avec vue sur bollards J_LIPS (Justus Lipsius)", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.383523, + 50.8421854 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-FROISSART", + "name_fr": "CCTV Schuman - Froissart", + "name_nl": "CCTV Schuman - Froissart", + "target_bollards": [ + "FROI_IN", + "FROI_OUT" + ], + "description": "Caméra CCTV sud-ouest avec vue sur bollards FROI_IN et FROI_OUT", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.3841192, + 50.8421134 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-OUDERGEM", + "name_fr": "CCTV Schuman - Oudergem", + "name_nl": "CCTV Schuman - Oudergem", + "target_bollards": [ + "OUD_IN", + "OUD_OUT" + ], + "description": "Caméra CCTV sud avec vue sur bollards OUD_IN et OUD_OUT", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.3843041, + 50.8426527 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-KORTENBERG", + "name_fr": "CCTV Schuman - Kortenberg", + "name_nl": "CCTV Schuman - Kortenberg", + "target_bollards": [], + "description": "Caméra CCTV nord-est avec vue sur l'Avenue de Cortenbergh / Kortenberglaan", + "network": "MANBRU", + "vms": "Genetec" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.3844459, + 50.8422481 + ] + }, + "properties": { + "asset_type": "ITSGeoAsset (CCTV Camera)", + "code": "CAM-SCHUMAN-KLEINE-WETSTRAAT", + "name_fr": "CCTV Schuman - Kleine Wetstraat", + "name_nl": "CCTV Schuman - Korte Wetstraat", + "target_bollards": [ + "WET_SIAMU", + "WET_235" + ], + "description": "Caméra CCTV est avec vue sur la Korte Wetstraat vers l'est", + "network": "MANBRU", + "vms": "Genetec" + } + } + ] +} \ No newline at end of file