Unsubscribe não funciona no RXJS, qual o método correto de uso?

Fiz um código para monitorar um Mapa usando o nativescript-geolocation e o nativescript-google-maps-sdk, há um serviço do Angular que encapsula toda a lógica de acesso ao nativescript-geolocation que recebe um subscribe fornecido por um comente do Angular.

Ao executar o listener representado pela função componente.mapViewRead(), que é executado quando o mapa está pronto, este cadastra no serviço o subscribe chamando um método servico.gpsInfo$ .subscribe((gpsInfo)=>this.gpsInfo = gpsInfo), quando o usuário manipula o mapa mudando a posição da camera para uma nova coordenada, uma propriedade que representa o subscripition é usada por outro listener responsável pela manipulação da camera para desativar o subscribe chamando a função this.subscription.unsubscribe().

Apesar da subscrição ser desativada teóricamente e poder ser constado através da propriedade this.subscription.isClosed, ele não para de processar as chamadas do Observable.

Será que eu estou fazendo algo errado? ou é um bug do RXJS?

Abaixo está o código de ambos serviço e componente.

Neste link pode ser encontrado o código completo do serviço, e abaixo o código relevante ao problema.

startHeadingUpdates() {         if (this.watchId) {             return;         }          this.watchId = geoLocation.watchLocation(             (loc) => {                 if (loc) { this._gpsInfo.next(<GPSInfo>loc);                 }             },             (e) => {                 console.error("Error: " + e.message);             },             { desiredAccuracy: 3, updateDistance: 10, minimumUpdateTime: 1000 * .3 });     }     public get gpsInfo(): Observable<GPSInfo> {         if (!this._gpsInfo$  )             this._gpsInfo$   = this._gpsInfo.asObservable()         return this._gpsInfo$  ;     }  

Código completo do componente pode ser encontrado neste link, abaixo apenas o código relevante ao problema:

// componente     private subscribeGPSInfo() {         this._gpsInfoSubscription = this._compass.gpsInfo.subscribe((gpsInfo) => {             this.gpsInfo = gpsInfo;         }, (error) => {         console.error("MussalaMapsComponent.ngAfterViewInit() _compass.gpsInfo.subscribe ", error);         });     }      private unsubscribeGPSInfo() {         if (this._gpsInfoSubscription && this._gpsInfoSubscription.closed) {         this._gpsInfoSubscription.unsubscribe();         }     }      goToMyLocation() {         const cfg: GPSConfig = {};         this._compass.getMyLocation(cfg)             .then((gpsInfo: GPSInfo) => {                 this.gpsInfo = gpsInfo;                 this.mapView.latitude = this.gpsInfo.latitude;                 this.mapView.longitude = this.gpsInfo.longitude;             });          this.subscribeGPSInfo();     }     onMapReady(event) {         const template = this.createInfoWindowTemplate();         this.mapView.infoWindowTemplates = template;          let marker: Marker = this._compass.createIslamicMarker(             1,             MakerType.MUSSALA,             "Mussala Fortaleza",             "Fortaleza, Ce, Brasil",             "Rua São Paulo, 1831 - Jacarecanga, Fortaleza - CE, 60310-226",             //-3.7214696,-38.5430259             <GPSInfo>{ latitude: -3.7214696, longitude: -38.5430259 }         );         this.mapView.addMarker(marker);          marker = this._compass.createIslamicMarker(             2,             MakerType.SPONSOR,             "Curso Arduino Minas",             "Aquiraz, Ce, Brasil",             "R. José Alves Pereira, S/N, Aquiraz, CE, Brasil",             {                 latitude: -3.9242100850690402,                 longitude: -38.45365650951862             }         );          this.mapView.addMarker(marker);          this.goToMyLocation();         this.subscribeGPSInfo();          this.isBusy = false;      }