diff --git a/src/app/map/map.html b/src/app/map/map.html index 6395a5a..277009d 100644 --- a/src/app/map/map.html +++ b/src/app/map/map.html @@ -1,8 +1,15 @@
+ @if (!isFullscreen && details) { +
+

{{ details.name }}

+

{{ details.building }}

+
+ }
diff --git a/src/app/map/map.scss b/src/app/map/map.scss index 352eacb..75954ab 100644 --- a/src/app/map/map.scss +++ b/src/app/map/map.scss @@ -1,9 +1,9 @@ .map-container { padding: 0; margin: 0; - position: absolute; + position: fixed; top: 54px; - height: calc(100vh - 54px); + height: 100%; width: 100%; } @@ -13,14 +13,14 @@ } .map-details { - left: 10%; - width: 90%; + left: 25%; + width: 75%; } .details { - position: absolute; + position: fixed; top: 54px; - left: 0; - width: 10%; + left: 25px; + width: 25%; height: 100%; } diff --git a/src/app/map/map.ts b/src/app/map/map.ts index 7bbc385..2406cc3 100644 --- a/src/app/map/map.ts +++ b/src/app/map/map.ts @@ -1,4 +1,4 @@ -import { Component, signal } from '@angular/core'; +import { Component, signal, OnInit, ChangeDetectorRef } from '@angular/core'; import { CommonModule } from '@angular/common'; import { LeafletModule } from '@bluehalo/ngx-leaflet'; import { center } from '@turf/turf'; @@ -14,42 +14,52 @@ import * as E from './geojson'; templateUrl: './map.html', styleUrl: './map.scss', }) -export class OSMMap { +export class OSMMap implements OnInit { private buildingLayer?: L.LayerGroup; protected readonly title = signal('HKA-OSM'); map?: L.Map; + details?: D.Details; + + osm?: L.TileLayer; + options: L.MapOptions = {}; + layerControl?: L.Control.Layers; isFullscreen = true; - osm = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { - maxNativeZoom: 19, - maxZoom: 21, - minZoom: 18, - attribution: '© OpenStreetMap contributors', - }); + constructor( + private overpass: Overpass, + private cdr: ChangeDetectorRef + ) {} - // Define map options - options: L.MapOptions = { - layers: [this.osm], - zoom: 18, // Zoom level - center: this.getCenter(), // Center of the map - maxBounds: L.latLngBounds( - L.latLng(49.014442, 8.387954), // Southwest corner - L.latLng(49.017847, 8.395448), // Northeast corner - ), - maxBoundsViscosity: 1.0, // Prevent panning outside bounds - }; + ngOnInit() { + this.osm = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxNativeZoom: 19, + maxZoom: 21, + minZoom: 18, + attribution: '© OpenStreetMap contributors', + }); - layerControl = L.control.layers({ - OpenStreetMap: this.osm, - }); + // Define map options + this.options = { + layers: [this.osm], + zoom: 18, // Zoom level + center: this.getCenter(), // Center of the map + maxBounds: L.latLngBounds( + L.latLng(49.014442, 8.387954), // Southwest corner + L.latLng(49.017847, 8.395448), // Northeast corner + ), + maxBoundsViscosity: 1.0, // Prevent panning outside bounds + }; - constructor(private overpass: Overpass) {} + this.layerControl = L.control.layers({ + OpenStreetMap: this.osm, + }); + } onMapReady(map: L.Map) { this.map = map; - this.layerControl.addTo(this.map); + this.layerControl?.addTo(this.map); this.loadBuildings().addTo(this.map); console.log('Map is ready'); } @@ -65,6 +75,7 @@ export class OSMMap { this.map?.setView(this.getCenter(feature.geometry), 20); this.buildingLayer = this.queryBuildings(feature.properties.name); this.buildingLayer.addTo(this.map!); + this.details = new D.Details(feature.properties.name, feature.properties.building) } else { this.map?.setView(this.getCenter(), 18); if (this.buildingLayer) { @@ -73,6 +84,7 @@ export class OSMMap { } console.log('Set isFullscreen to:', this.isFullscreen); console.log('Clicked on feature:', feature.properties?.name); + this.cdr.detectChanges(); }, }); if (feature.properties && feature.properties.name) {