Ako v Ionic (ver.5) pridať funkciu zistenia vlastnej polohy (geolokácia) (elegantnejšie)
Tags: ionic, cordova
Published: 2023-01-06 09:06:47

V [predchádzajúcom článku](https://dev.to/jurajchovan/ako-v-ionic-ver5-pridat-funkciu-zistenia-vlastnej-polohy-geolokacia-3bc) je popísanie implementácie geolokačného pluginu Cordova do Ionic (ver.5) aplikácie.
Teraz popíšem malú úpravu - presunutie tejto funkcionality z konkrétnej stránky do servisu. Výhodou je samozrejme to, že ak potrebujeme zisťovať GPS polohu cez tento Cordova plugin z viacerých stránok aplikácie, nie je potrebné opakovať tento kód v každej z týchto stránok, ale iba urobiť volanie funkcie zo servisu.
Inštalácia knižníc a plugin-ov je rovnaká (ak to ešte nemáme v aplikácii, projekte nainštalované) ako je popísané v predchádzajúcom článku.
Takisto je potrebné, rovnako - doplniť potrebnú referenciu a provider aj do súboru "app.module.ts".
Zmena prichádza až v tomto bode.

Ak už mám vytvorený v aplikácii nejaký servis použijem ho (ak nie vytvorím si servis nový, viď napr.[článok](https://dev.to/jurajchovan/pridanie-servisu-do-ionic-aplikacie-4o5d)).
V súbore tohto servisu doplniť nasledujúci kód:
	

```
	...
import { Geolocation } from '@ionic-native/geolocation/ngx';
	locationCordinates = Array();
		...
  constructor(
    ...
    private geolocation: Geolocation
  ) { }
  // zisti aktualnu polohu (pomocou cordova geolocation pluginu):
  async getUserCoordinates() {
    await this.geolocation.getCurrentPosition().then(
      (resp) => {
        // naplni pole hodnot, ktore bude odovzdavat naspat:
        this.locationCordinates.push(resp.coords['latitude']);
        this.locationCordinates.push(resp.coords['longitude']);
      }
    ).catch(
      (error) => {
        console.log('Error getting location', error);
      }
    );
    return this.locationCordinates;
  }
		...
```
a na stránke, kde chceme využiť túto funkcionalitu, napr.na stránke "home", tj.v súbore "home.page.ts" je potrebné doplniť:
	

```
	...
import { PozadovanyService } from 'src/app/services/weather.service';
		...
export class HomePage implements OnInit {
  locationCordinates: any;
  latCoords: number = 48.659052;  // default-na hodnota GPS latitude: Bohdanovce 369
  lngCoords: number = 21.399222;  // default-na hodnota GPS longitude: Bohdanovce 369
  pageContent = null;
		...
  constructor(
    private weatherService: WeatherService,
  ) {}
  // inicializacia stranky:
  ngOnInit()  {
    this.getLocation();
  }
  // tlacitko [Get location] - zisti aktualnu polohu pouzivatela (cez servis):
  getLocation() {
    this.locationCordinates = this.weatherService.getUserCoordinates().then(
      (result) => {
        // console.log('getLocation: result: '+result);
        this.latCoords = result[0];
        this.lngCoords = result[1];
        console.log('getLocation: lat/lng: '+this.latCoords+'/'+this.lngCoords);
      }
    ).catch(
      (error) => {
        console.log('Error getting location', error);
      }
    );
  }
		...

```
Funkcionalita je vykonaná s načítaním (inicializáciou stránky), ale tiež je možné túto funkciu "getLocation()" volať aj pri stisnutí tlačítka na stránke (tj."home.page.html" mám niekde definované tlačítko):
	

```
	...
<ion-button color="primary" shape="round" (click)="getLocation()">Get location</ion-button>

```
...