Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hargon

Calcular distância

Recommended Posts

Boa tarde moçada,

 

 

Estou precisando calcular a distância entre dois pontos, e a única informação que eu tenho é a longitude e latitude dos mesmos.

 

Consegui uma explicação em um site, mas o resultado não bate com o de outros sites que tem um sistema parecido.

http://www.multicascos.com.br/calculodistancia.htm

 

Alguém tem noção de como calcular isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é pura matemática, pega a latitude e longitude que você tem e cria uma função que vai fazer o calculo de acordo com a matematica que tem no link que você colocou

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois é... mas o problema ali parece ser o arcocoseno... você sabe calcular isso? Eu sei que é o inverso do coseno.. mas...

 

Encontrei esta formula, mas não chegou ao mesmo resultado que encontrei em alguns sites.

 

atn(-x / sqr(-x * x + 1)) + 2 * atn(1)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixi eu cabulava aula de matematica hehe]mais e algo pra quem gosta bem de matematica procura em forum de professores estas coisas

Compartilhar este post


Link para o post
Compartilhar em outros sites

ve se ajuda eu tenho esse função SQL

 

/*
@UNIT VALUES
---STATUTEMILES = 3437.74677
---NORMALMILES = 3963.0
---KILOMETERS = 6378.7
---valor 57.295779513 seja qual for o RADIANo 180/PI
*/
CREATE FUNCTION fnc_get_distance (@ZIP varchar(50),@UNIT float)
RETURNS TABLE
AS
RETURN(
SELECT
((ACOS(
SIN(a.latitude/57.295779513) * SIN(b.latitude/57.295779513)
+ COS(a.latitude/57.295779513) * COS(b.latitude/57.295779513)
* COS(b.longitude/57.295779513 - a.longitude/57.295779513)
)) * @UNIT)
AS DISTANCE,
a.zipcode ZIP1, a.latitude LAT1, a.longitude LONG1, a.city CITY1, a.stateabbreviation STATE1,
b.zipcode ZIP2, b.latitude LAT2, b.longitude LONG2, b.city CITY2, b.stateabbreviation STATE2
FROM zipcodes a, zipcodes b
WHERE a.zipcode = @ZIP
)

---exemplos 
Select DISTANCE,ZIP1,CITY1,STATE1,ZIP2,CITY2,STATE2 From fnc_get_distance ('98052',3963) WHERE DISTANCE <= 200 ORDER BY DISTANCE, CITY2
Select * From fnc_get_distance ('98115',3963) WHERE ZIP2='98045' ORDER BY DISTANCE, CITY2

 

Esta rotina calcula a distância entre dois pontos (dado a Latitude / longitude dos pontos). Ele está sendo usado para calcular a distância entre os dois CEPs .

 

const pi = 3.14159265358979323846

Function distance(lat1, lon1, lat2, lon2, unit)
  Dim theta, dist
  theta = lon1 - lon2
  dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta))
  response.write "dist = " & dist & "<br>"
  dist = acos(dist)
  dist = rad2deg(dist)
  response.write "dist = " & dist & "<br>"
  distance = dist * 60 * 1.1515
  Select Case ucase(unit)
	Case "K"
	  distance = distance * 1.609344
	Case "N"
	  distance = distance * 0.8684
  End Select
End Function 


'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  Esta função pega arccos e arctan :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function acos(rad)
  If Abs(rad) <> 1 Then
	acos = pi/2 - Atn(rad / Sqr(1 - rad * rad))
  ElseIf rad = -1 Then
	acos = pi
  End If
End function


'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  Esta função converte graus decimais  em  radianos		  :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function deg2rad(Deg)
	deg2rad = cdbl(Deg * pi / 180)
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  Esta função converte radianos em graus decimais			 :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function rad2deg(Rad)
	rad2deg = cdbl(Rad * 180 / pi)
End Function

msgbox(distance(32.9697, -96.80322, 29.46786, -98.53506, "M") & " Milhas<br>")
msgbox(distance(32.9697, -96.80322, 29.46786, -98.53506, "K") & " Kilometros<br>")
msgbox(distance(32.9697, -96.80322, 29.46786, -98.53506, "N") & " Milhas Nauticas<br>")

aqui um link http://mathforum.org/library/drmath/view/51756.html ensinando a Distância entre os pontos sobre a Terra

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria mais ou menos igual para calcular frete...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.