Skip to content

Instantly share code, notes, and snippets.

@berinhard
Created March 18, 2019 20:47
Show Gist options
  • Save berinhard/014ba858d0fbd57d2ac8506ef47edd6b to your computer and use it in GitHub Desktop.
Save berinhard/014ba858d0fbd57d2ac8506ef47edd6b to your computer and use it in GitHub Desktop.
Exemplo 004
import math
class Posicao():
PLANA, ESFERICA, ELIPTICA = 'plana', 'esferica', 'eliptica'
KM, M, MILHAS = 'kms', 'm', 'miles'
def __init__(self, lat, lng):
self.lat, self.lng = lat, lng
self.geometria = self.PLANA
self.unidade = self.KM
@property
def lat(self):
return math.degree(self.phi)
@lat.setter
def lat(self, value):
self.phi = math.radians(value)
@property
def phi(self):
return self._phi
@phi.setter
def phi(self, value):
if not -math.pi / 2 <= value <= math.pi / 2:
raise ValueError("Latitude inválida")
self._phi = value
@property
def lng(self):
return math.degree(self.theta)
@lng.setter
def lng(self, value):
self.theta = math.radians(value)
@property
def theta(self):
return self._theta
@theta.setter
def theta(self, value):
if not -math.pi <= value <= math.pi :
raise ValueError("Longitude inválida")
self._theta = value
def distancia(self, pos):
if self.geometria == self.PLANA:
# calcula a distância conciderando a geometria plana
elif self.geometria == self.ESFERICA:
# calcula a distância conciderando a geometria esférica
else:
# calcula a distância considerando a geometria elíptica
if self.unidade == self.KM:
# converte a distância para kms
elif self.unidade == self.MILHAS:
# converte a distância para milhas
else:
# converte a distância para metros
def direcao(self, pos):
if self.geometria == self.PLANA:
# calcula a direção conciderando a geometria plana
elif self.geometria == self.ESFERICA:
# calcula a direção conciderando a geometria esférica
else:
# calcula a direção considerando a geometria elíptica
p1 = Posicao(12.0123, 36.12313)
p2 = Posicao(12.5123, 34.00000)
dist = p1.distancia(p2)
direcao = p1.direcao(p2)
print(f"Distância {p1} até {p2} é de {dist} utilizando quitômetros e geometria plana")
print(f"Direção de {p1} até {p2} é de {direcao} graus")
p1.geometria = Posicao.ESFERICA
p1.unidade = Posicao.MILHAS
dist = p1.distancia(p2)
direcao = p1.direcao(p2)
print(f"Distância {p1} até {p2} é de {dist} utilizando milhas e geometria esférica")
print(f"Direção de {p1} até {p2} é de {direcao} graus")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment