Ir para conteúdo

POWERED BY:

Arquivado

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

raventools

Problema com variável

Recommended Posts

Pessoal, como vão?

 

Estou tendo uma dificuldade tremenda em resolver esse meu problema, fiquei o dia todo pesquisando na internet, seja em fóruns nacionais e internacionais e nada.

 

Possuo uma função para calcular distância entre 2 pontos usando coordenadas (Latitude X Longitude), e na parte que chama a função é passado as coordenadas.

 

Ocorre que se eu colocar as coordenadas na chamada da função funciona normalmente, mas se eu colocar a variável fora da função o código efetua o cálculo incorretamente, dando valores estranhos.

 

Veja a chamada da função:

 

response.write Round(distance(-23.563041, -46.654748, -23.539069, -46.638784, "K"))

 

-23.563041 é a Latitude da Av Paulista, 1345

-46.654748 é a Longitude da Av Paulista, 1345

-23.539069 é a Latitude da Rua Santa Ifigenia, 329

-46.638784 é a Longitude da Rua Santa Ifigenia, 329

K = parâmetro da função, para retornar o valor em KILOMETROS

 

O response.write acima vai retornar o valor: 3, indicando que o cálculo desses dois pontos é de aproximadamente 3 Kilômetros, mas claro que não é preciso, mas o cálculo é feito em linha reta, e sendo assim pode até ser.

 

Até aí tudo bem, mas repare que as coordenadas foram inseridas na chamada da função, porém se eu quiser colocá-las em variáveis o resultado não é o mesmo, exemplo como estou tentando fazer:

 

LatitudeA = "-23.563041"

LongitudeA = "-46.654748"

LatitudeB = "-23.539069"

LongitudeB = "-46.638784"

 

response.write Round(distance(LatitudeA, LongitudeA, LatitudeB, LongitudeB, "K"))

 

O resultado que deveria ser 3, para a chamada acima é: 13006

 

Fiz uns testes com VarType e descobri que uma variável sem as áspas é do tipo Double Floating, e é assim que é passado para a função.

 

Preciso saber como passar essas coordenadas para a função, pois os dados serão calculados dinamicamente, e nesse caso as coordenadas não podem ficar fixas no código.

 

Já tentei de tudo quanto é modo e não consegui ter êxito.

 

Alguma dica?

 

Coloco aqui o código completo da função:

 

<%

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))
dist = acos(dist)
dist = rad2deg(dist)
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
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: This function get the arccos function from arctan function :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: This function converts decimal degrees to radians :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function deg2rad(Deg)
deg2rad = cdbl(Deg * pi / 180)
End Function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: This function converts radians to decimal degrees :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function rad2deg(Rad)
rad2deg = cdbl(Rad * 180 / pi)
End Function
response.write Round(distance(-23.563041, -46.654748, -23.539069, -46.638784, "K"))

%>

 

Desde já obrigado pela atenção!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

aconselho a usar o Google Maps Geocoding API , dá uma olha da aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

aconselho a usar o Google Maps Geocoding API , dá uma olha da aqui

 

Não poderei, pois usarei em Intranet local sem acesso à internet.

 

Será que não tem jeito de passar a variável para a função?

 

Mesmo assim obrigado pela resposta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

converta a variável antes

Compartilhar este post


Link para o post
Compartilhar em outros sites

converta a variável antes

 

Sabe como poderei fazer? Já tentei: cint(var), int(var), essas conversões arredondam os números.

 

Como a variável passada para a função é do tipo Double Floating, se eu usar o Round ele tira o "ponto" entre os números das coordenadas.

 

Acho que ASP clássico não tem como especificar que a variável X é de tal tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quer converter para double?

Cdbl(valor) = converte para double

Cint (valor) = converte para inteiro



Csng(valor) = converte para single .... com menos casas decimais que o double

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o CDbl exemplo:

 

 

<%
LatitudeA = -23.563041
response.write(CDbl(LatitudeA) & "<br />")

%>

mas o valor tem que estar sem aspas, senão ele resulta em

23563041

resultado = -23,563041
mas se sua função não aceitar a vírgula, terás que substituir a vírgula pelo ponto usando o Replace

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Cdbl funciona entre aspas sim! sendo que no lugar do ponto deverá ser vírgula, pois no português a vírgula separa as casas decimais e o ponto separa os milhares já no inglês é ao contrário...

 

att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

se ele estiver entre aspas ele retorna assim

 

23563041

 

para não ter esse incoveniemente, retire. Execute desta forma:

 

 

<% LatitudeA = -23.563041 
response.write(CDbl(LatitudeA) & "<br />") %>

vai rodar direitinho

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

normalmente a função é usada em variáveis no que acaba resultando...

 

variavel = -23.332255 que é igual "-23,332255"

 

response.write Cdbl(variavel)

 

que será -23,332255

Compartilhar este post


Link para o post
Compartilhar em outros sites

com aspas ele tira a vírgula.

 

Exemplo:

 

teste.asp

 

sem vírgula

 

 

<% LatitudeA = -23.563041
response.write(CDbl(LatitudeA) & "<br />") %>

 

 

 

teste_com_vírgula.asp

 

com vírgula

 

 

<% LatitudeA = "-23.563041"
response.write(CDbl(LatitudeA) & "<br />") %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

entre aspas com vírgula

 

teste_com_vírgula.asp

 

 

<% LatitudeA = "-23.563041"

response.write(CDbl(LatitudeA) & "<br />") %>

 

ele retorna -23563041

 

não pode ter aspas

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.