/// <summary> /// Atualiza as propriedades DistanciaBuracoMeio e DistanciaTeeMeio. /// </summary> private void CalcularNovaDistancia() { if (Jogo == null) { return; } Metrico tipoMetrico = (Jogo.Metrico.Nome.Equals("Metros")) ? Metrico.Metro : Metrico.Yard; DistanciaBuracoMeio = _geometriaService.ObterDistancia(BuracoPinPosicao, MeioPinPosicao, tipoMetrico); DistanciaTeeMeio = _geometriaService.ObterDistancia(TeePinPosicao, MeioPinPosicao, tipoMetrico); }
public double ObterDistancia(Position posicaoOrigem, Position posicaoDestino, Metrico metrico) { //6371 - Quilómetros //3960 - Miles const double raio = 6371; var sdlat = Math.Sin((posicaoDestino.Latitude - posicaoOrigem.Latitude) / 2); var sdlon = Math.Sin((posicaoDestino.Longitude - posicaoOrigem.Longitude) / 2); var q = sdlat * sdlat + Math.Cos(posicaoOrigem.Latitude) * Math.Cos(posicaoDestino.Latitude) * sdlon * sdlon; var d = 2 * raio * Math.Asin(Math.Sqrt(q)); Distance distancia = Distance.FromKilometers(d); double distanciaFinal = (metrico.Equals(Metrico.Metro)) ? distancia.Meters : (distancia.Meters * 1.0936133); return(distanciaFinal); }