Compare commits

...

2 Commits

Author SHA1 Message Date
David Sp
b1464cc32e Re-implement and fix detail side section 2026-04-27 14:10:41 +02:00
David Sp
50b261e8ba Move initialization into ngOnInit
Co-authored-by: Copilot <copilot@github.com>
2026-04-27 14:08:01 +02:00
3 changed files with 50 additions and 31 deletions

View File

@@ -1,8 +1,15 @@
<div class="map-wrapper">
<div
class="map-container"
[ngClass]="isFullscreen ? 'map-fullscreen' : 'map-details'"
leaflet
[leafletOptions]="options"
(leafletMapReady)="onMapReady($event)"
></div>
@if (!isFullscreen && details) {
<div class="details">
<h2>{{ details.name }}</h2>
<p>{{ details.building }}</p>
</div>
}
</div>

View File

@@ -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%;
}

View File

@@ -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,15 +14,26 @@ 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', {
constructor(
private overpass: Overpass,
private cdr: ChangeDetectorRef
) {}
ngOnInit() {
this.osm = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxNativeZoom: 19,
maxZoom: 21,
minZoom: 18,
@@ -30,7 +41,7 @@ export class OSMMap {
});
// Define map options
options: L.MapOptions = {
this.options = {
layers: [this.osm],
zoom: 18, // Zoom level
center: this.getCenter(), // Center of the map
@@ -41,15 +52,14 @@ export class OSMMap {
maxBoundsViscosity: 1.0, // Prevent panning outside bounds
};
layerControl = L.control.layers({
this.layerControl = L.control.layers({
OpenStreetMap: this.osm,
});
constructor(private overpass: Overpass) {}
}
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) {