Onde esta lat e long declarado em sua classe? Em nenhum momento você declarou essas propriedades, logo não existem. Mesmo que existissem você teria um erro. Você esta passando this.showPosition como callback de navigator.geolocation.getCurrentPosition.
No curso de JS Avançado 1, pré-requisito deste treinamento você aprendeu que funções possuem escopo dinâmico e o this de uma função não será o this que representa o objeto da sua classe. Por isso foi introduzido o conceito de arrow function e seu escopo léxico. Eu lembro esse conceito no curso de Angular.
Alterando sua classe:
constructor(service: BoxService){
this.service = service;
this.getLocation();
// adicionando as propriedades que faltam
this.lat = 0
this.long = 0;
}
getLocation() {
if (navigator.geolocation) {
// usando arrow function
navigator.geolocation.getCurrentPosition(position => {
this.lat = position.coords.latitude;
this.long = position.coords.longitude;
});
} else {
alert("Sorry, geolocation is not supported by this browser.");
}
}
Mas você omitiu o código completo da sua classe e não dá para eu entender se getLocationserá chamada por ela ou por alguém que vá usar o serviço. Ou seja, não esta claro para quem lê e deseja recomendar qualquer melhoria a sua intenção com esse código. Consigo enxergar que você quer a latitude e longitude, mas para quem? Quem chama o serviço? Se for, porque guardar esses valores em propriedades da classe?
Fornece pra gente uma visão geral do que você quer com getLocation().