Jump to content
Thais Hoe

Geolocalização - Loja mais próxima do cliente

Recommended Posts

Bom dia!

Trabalho muito pouco com o JavaScript e preciso fazer um script que:

Pega a localização do cliente >> Faz o calculo da distância entre a localização e cada loja >> Faz o calculo de qual loja está mais próxima (em KM) >> Se a distancia da loja mais próxima for inferior a 30km = Mostra aviso com o endereço da loja mais próxima (se possível um botão pra ir pra pagina de informações, ou um popup que consiga colocar endereço,telefone,etc)  >> Se a distancia da loja mais próxima for superior a 30km = exibe aviso de que não tem lojas próximas a localização atual dele.

 

Fiz com "alert" os avisos, mas se eu conseguisse fazer tudo isso com um popup seria legal. Por hora coloquei duas lojas apenas, mas posteriormente vou ter que colocar mais de 10, então se houver um jeito de fazer esse código ser mais "limpo" quando isso acontecer (criando uma lista ou algo do gênero) também agradeço.

 

Tenho um código mais ou menos pronto, mas como não domino a linguagem acredito que contém alguns erros:

// Lojas
var Americana = {
	posicao : {
		latitude1 : -22.742685,
		longitude1 : -47.341661	
}
}

var BeloHorizonte = {
	posicao : {
		latitude2 : -19.935678,
		longitude2 : -43.970808	
}
}

var Parametro = {
	distanciaMaxima : 30,

	// Funcao que ira verificar se o cliente esta por perto
	mostraLoja : function( posicao ){
		var distancia = MenorDistancia;
		// Verifica se o cliente nao esta muito longe
		if( distancia <= this.distanciaMaxima ){
			if ( confirm( 'A loja mais próxima está à ' + distancia + ' KM ' ) ){
				alert( 'Ver mais dados da loja' );
			}
		} else {
			alert( 'Ops, você está muito longe, não temos uma loja próxima' );
		}
	}
};

// Objeto localizacao
var Localizacao = {

	// Inicia
	inicia : function(){
		
		// Quando o browser retorna a posicao do usuario
		var sucesso = function( posicao ){
			Parametro.mostraLoja( posicao.coords );
		};

		// Erro no processo de obter a posicao
		var erro = function( erro ){
			var erroDescricao = 'Ops, ';
			switch( erro.code ) {
				case erro.PERMISSION_DENIED:
						erroDescricao += 'usuário não autorizou a Geolocation.';
				break;
				case erro.POSITION_UNAVAILABLE:
						erroDescricao += 'localização indisponível.';
				break;
				case erro.TIMEOUT:
						erroDescricao += 'tempo expirado.';
				break;
				case erro.UNKNOWN_ERROR:
						erroDescricao += 'não sei o que foi, mas deu erro!';
				break;
			}
			alert( erroDescricao )
		};

		// Verifica se o browser do usuario tem suporte a geolocation
		if ( navigator.geolocation ){
			navigator.geolocation.getCurrentPosition( sucesso, erro );
		} else {
			erro();
		}
	}
};

// Objeto para calcular a distancia entre dois pontos
// Adaptado dessa formula http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points
var Distancia1 = {
	distanciaEntreDoisPontos1 : function( pontoInicial, pontoFinal ){
		var R = 6371; // Radio da Terra
		var dLat = this.graus2Radianos( pontoFinal.latitude - pontoInicial.latitude1 ); 
		var dLon = this.graus2Radianos( pontoFinal.longitude - pontoInicial.longitude1 ); 
		var a = Math.sin( dLat/2 ) * Math.sin( dLat/2 ) + Math.cos( this.graus2Radianos( pontoInicial.latitude1 ) ) * Math.cos( this.graus2Radianos( pontoFinal.latitude ) ) * Math.sin( dLon/2 ) * Math.sin( dLon/2 ); 
		var c = 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1-a ) ); 
		var d = R * c; 
		return d;
	},
	graus2Radianos : function( graus ){
		return graus * ( Math.PI/180 )
	}
};

// Objeto para calcular a distancia entre dois pontos
// Adaptado dessa formula http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points
var Distancia2 = {
	distanciaEntreDoisPontos2 : function( pontoInicial, pontoFinal ){
		var R = 6371; // Radio da Terra
		var dLat = this.graus2Radianos( pontoFinal.latitude - pontoInicial.latitude2 ); 
		var dLon = this.graus2Radianos( pontoFinal.longitude - pontoInicial.longitude2 ); 
		var a = Math.sin( dLat/2 ) * Math.sin( dLat/2 ) + Math.cos( this.graus2Radianos( pontoInicial.latitude2 ) ) * Math.cos( this.graus2Radianos( pontoFinal.latitude ) ) * Math.sin( dLon/2 ) * Math.sin( dLon/2 ); 
		var c = 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1-a ) ); 
		var d = R * c; 
		return d;
	},
	graus2Radianos : function( graus ){
		return graus * ( Math.PI/180 )
	}
};

var MenorDistancia = Math.min (Distancia1.distanciaEntreDoisPontos1, Distancia2.distanciaEntreDoisPontos2);


$( document ).ready( function(){
Localizacao.inicia();
} );

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By JoaoV-26
      olá,
       
      Eu preciso fazer uma matriz 7x7 que imprima caractere 'x' e 'o' porém o x precisar ser nas duas diagonais, fazer a matriz e imprimir o x em uma diagonal eu consegui porém não estou conseguindo de jeito nenhum imprimir na outra diagonal, a matriz precisa sair assim: 
       
      x o o o o o x
      o x o o o x o
      o o x o x o o 
      o o o x o o o
      o o x o x o o
      o x o o o x o
      x o o o o o x
       
      a minha está saindo assim (foto em anexo)
       
      Meu código:

       
      #include<stdio.h> int main(){          int i, j;     char str[2]="x", str1[2]="o";                for(i=1; i<=7; i++){         for(j=1;j<=7; j++)              if(i+j == 7+1){                      printf("%s", str);                      }else                      printf("%s", str1);                      printf("\n");          }      } Alguém pode me ajudar, como faço para outra diagonal sair 'x' também ?????

    • By MARCEL MENDES
      Boa noite
      Gostaria de uma ajuda, sou iniciante, estou tentando fazer uma tabela que eu fiz em Excel, só que eu queria fazer em PHP ou Java script, alguém pode me ajudar a dar o pontapé inicial por onde começo! Sei que vai precisar de um banco de dados,
      O que eu gostaria de fazer é o seguinte, o usuário admin entra na área restrita, que eu já fiz o login e sistema de cadastro em php, ele lança o time que vai competir e colocar gerar volante, ai o usuário normal quando abrir o volante no login dele faz o jogo e coloca enviar ou validar jogo, depois em uma data especifica o admin lança o resultado por uma outra página e coloca gerar vai gerar uma página de classificação de quem fizer mais pontos, assim colocação 1º João 2º Rafael etc... quantos mais resultados você acertar mais ponto você vai obter!
       
      Segue a tabela abaixo, para melhor visualização.
       

       
      Assim coluna 1 flamengo x botafogo eu marquei que botafogo vai ganhar, aonde você visualiza por um (X) se eu marcasse no meio seria empate e no lado esquerdo seria que o flamengo que sairia vitorioso. Bom sou iniciante e está difícil, mais quero aprender e por onde posso começar alguma ajuda desde já agradeço abraço a todos. 
    • By MARCEL MENDES
      Boa noite
      Gostaria de uma ajuda, sou iniciante, estou tentando fazer uma tabela que eu fiz em Excel, só que eu queria fazer em PHP ou Java script, alguém pode me ajudar a dar o pontapé inicial por onde começo! Sei que vai precisar de um banco de dados,
      O que eu gostaria de fazer é o seguinte, o usuário admin entra na área restrita, que eu já fiz o login e sistema de cadastro em php, ele lança o time que vai competir e colocar gerar volante, ai o usuário normal quando abrir o volante no login dele faz o jogo e coloca enviar ou validar jogo, depois em uma data especifica o admin lança o resultado por uma outra página e coloca gerar vai gerar uma página de classificação de quem fizer mais pontos, assim colocação 1º João 2º Rafael etc... quantos mais resultados você acertar mais ponto você vai obter!
       
      Segue a tabela abaixo, para melhor visualização.

      Assim coluna 1 flamengo x botafogo eu marquei que botafogo vai ganhar, aonde você visualiza por um (X) se eu marcasse no meio seria empate e no lado esquerdo seria que o flamengo que sairia vitorioso. Bom sou iniciante e está difícil, mais quero aprender e por onde posso começar alguma ajuda desde já agradeço abraço a todos. 
       
    • By MARCEL MENDES
      Boa noite
       
      Gostaria de uma ajuda, sou iniciante, estou tentando fazer uma tabela que eu fiz em excel, só que eu queria fazer em PHP ou javascript, alguem pode me ajudar a dar o pontapé inicial por onde começo! sei que vai precisar de uma banco de dados,.
      O que eu gostaria de fazer é o seguinte, o usuário admin entra na área restrita, que eu já fiz o login e sistema de cadastro em php, ele lança o time que vai competir e colocar gerar volante, ai o usuário normal quando abrir o volante no login dele faz o jogo e coloca enviar ou validar jogo, depois em uma data especifica o admin lança o resultado por uma outra pagina e coloca gerar vai gerar uma pagina de classificação de quem fizer mais pontos, assim  colocação 1º João 2º Rafael etc.. quantos mais resultados você acertar mais ponto você vai obter!
      Segue a tabela abaixo, para melhor visualização.
       
       
      Assim coluna 1 flamengo x botafogo eu marquei que botafogo vai ganhar , aonde você visualiza por um (X) se eu marcasse no meio seria empate e no lado esquerdo seria que o flamengo que sairia vitorioso . bom sou iniciante e ta difícil, mais quero aprender e por onde posso começar alguma ajuda desde já agradeço abraço a todos . 
    • By kadumx
      Boa noite pessoal,
       
      como posso migrar meus arquivos wordpress que estão em pasta www.site.com.br/novo para raiz www.site.com.br.
      Tentei seguir esse (  http://www.luisaambros.com/blog/como-trocar-o-wordpress-de-diretorio-na-mesma-hospedagem/ )mas quando chego na etapa 8 e 9 sou redirecionado para o painel antigo e não o novo.
       
      Agradeço se conseguir tirar essa dúvida.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.