From 0b963a3319895afab3f892aa036609ed3a0b5c54 Mon Sep 17 00:00:00 2001 From: Ol86 Date: Mon, 20 Apr 2026 21:23:16 +0200 Subject: [PATCH] Add overpass service --- src/app/map/map.ts | 11 +++++++++++ src/app/overpass.spec.ts | 16 ++++++++++++++++ src/app/overpass.ts | 26 ++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/app/overpass.spec.ts create mode 100644 src/app/overpass.ts diff --git a/src/app/map/map.ts b/src/app/map/map.ts index 419439e..24f41d1 100644 --- a/src/app/map/map.ts +++ b/src/app/map/map.ts @@ -1,6 +1,7 @@ import { Component, signal } from '@angular/core'; import { CommonModule } from '@angular/common'; import { LeafletModule } from '@bluehalo/ngx-leaflet'; +import { Overpass } from '../overpass'; import * as L from 'leaflet'; import * as D from './details'; @@ -44,10 +45,13 @@ export class Map { OpenStreetMap: this.osm, }); + constructor(private overpass: Overpass) {} + onMapReady(map: L.Map) { this.map = map; this.layerControl.addTo(this.map); this.loadBuildings().addTo(this.map); + this.queryBuildings(); console.log('Map is ready'); } @@ -90,4 +94,11 @@ export class Map { }, }); } + + queryBuildings() { + this.overpass.fetchBuildings('E').subscribe((data) => { + console.log('Fetched building data from Overpass API:', data); + // Here you would typically process the data and add it to the map + }); + } } diff --git a/src/app/overpass.spec.ts b/src/app/overpass.spec.ts new file mode 100644 index 0000000..7005766 --- /dev/null +++ b/src/app/overpass.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { Overpass } from './overpass'; + +describe('Overpass', () => { + let service: Overpass; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(Overpass); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/overpass.ts b/src/app/overpass.ts new file mode 100644 index 0000000..e03812b --- /dev/null +++ b/src/app/overpass.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; + +@Injectable({ + providedIn: 'root', +}) +export class Overpass { + private readonly apiUrl = 'https://overpass-api.de/api/interpreter'; + + constructor(private http: HttpClient) {} + + fetchBuildings(building_name: string) { + const header = { 'Content-Type': 'text/plain' }; + const query = ` + [out:json][timeout:25]; + nwr["name"="${building_name}"](49.014442, 8.387954, 49.017847, 8.395448)->.building; + ( + nwr["indoor"="room"](area.building); + ); + (._;>;); + out body; + `; + + return this.http.post(this.apiUrl, query, { headers: header }); + } +}