diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 0cd8cd5..d602db1 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,19 +1,14 @@ -import { Component, OnInit, AfterViewInit, NgModule } from '@angular/core'; +import { Component, OnInit, AfterViewInit } from '@angular/core'; +import { Nominatim } from './interfaces/nominatim'; +import { NominatimService } from './nominatim.service'; + import { defaults as defaultControls } from 'ol/control'; import { fromLonLat } from 'ol/proj'; -import { Observable, throwError } from 'rxjs'; -import { map } from 'rxjs/operators'; -import { BrowserModule } from '@angular/platform-browser'; -import { HttpClient } from '@angular/common/http'; - import Map from 'ol/Map'; import View from 'ol/View'; import TileLayer from 'ol/layer/Tile'; import XYZ from 'ol/source/XYZ'; import ZoomToExtent from 'ol/control/ZoomToExtent'; -import { Nominatim } from './interfaces/nominatim'; - - @Component({ selector: 'app-root', @@ -25,14 +20,14 @@ export class AppComponent implements AfterViewInit, OnInit { title = "Street Map"; map: Map; - - constructor(private http: HttpClient) { } + constructor(private nominatimService: NominatimService) { } - - getValue(valueFrom:string, valueTo:string){ + // Gets called in "app.component.html" when an input changes its value + getValue(valueFrom:string, valueTo:string): void{ console.log("From " + valueFrom + " to " + valueTo); - this.http.get("https://nominatim.openstreetmap.org/search.php?format=jsonv2&q=" + valueFrom) - .subscribe((response: Nominatim) => console.log(response)) + + this.nominatimService.sendQueryRequest(valueFrom) + .subscribe((response: Nominatim[]) => console.log(response)); } ngOnInit() { diff --git a/src/app/interfaces/nominatim.ts b/src/app/interfaces/nominatim.ts index 382c543..a4661d1 100644 --- a/src/app/interfaces/nominatim.ts +++ b/src/app/interfaces/nominatim.ts @@ -1,4 +1,4 @@ - +// Nominatim JSON object to TypeScript interface export interface Nominatim { boundingbox: Array; category: string; diff --git a/src/app/nominatim.service.spec.ts b/src/app/nominatim.service.spec.ts new file mode 100644 index 0000000..ccd4b26 --- /dev/null +++ b/src/app/nominatim.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { NominatimService } from './nominatim.service'; + +describe('NominatimService', () => { + let service: NominatimService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(NominatimService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/nominatim.service.ts b/src/app/nominatim.service.ts new file mode 100644 index 0000000..c230c35 --- /dev/null +++ b/src/app/nominatim.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Nominatim } from './interfaces/nominatim'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) + +// communicates with Nominatim (https://nominatim.org/) +export class NominatimService{ + constructor(private http: HttpClient) { } + + // sends a query request to Nominatim and gets response (https://nominatim.org/release-docs/develop/api/Search/) + sendQueryRequest(q: string): Observable { + return this.http.get("https://nominatim.openstreetmap.org/search.php?format=jsonv2&q=" + q); + } +} \ No newline at end of file