Ir para conteúdo

POWERED BY:

Arquivado

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

Maykel-ctba

[Resolvido] Variavel retornando undefined

Recommended Posts

Fala galera!

 

Tenho a variavel posicionamentoGeolocalizacao declarada abaixo. Se eu der um alert logo após a declaracao posicionamentoGeolocalizacao = pos, retorna um valor normal (uma coordenada do Google maps). Se eu peço o alert onde coloquei no exemplo abaixo, está aparecendo UNDEFINED. Porque? :pinch:

 

if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
	var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
	var infowindow = new google.maps.InfoWindow(
	{
		map: map,
		position: pos,
		content: 'Sua localização aproximada'
	});

	posicionamentoGeolocalizacao = pos;
	map.setCenter(pos);

}, function()
{
	handleNoGeolocation(true);
});

alert(posicionamentoGeolocalizacao);

} else {
handleNoGeolocation(false); // Caso o navegador não possua geolocalizador
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, na verdade é problema de escopo.

 

A variavel não existe de onde você tentou acessar ela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo se eu declarar lá em cima um var posicionamentoGeolocalizacao; ele não deveria reconhecer? A variavel existe antes, e seu valor é preenchido dentro da condicional... ou estou boiando demais... Existe algum jeito de resgatar o valor daquela variavel? :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente atribuir o valor em escopo global:

 

window.posicionamentoGeolocalizacao = posicionamentoGeolocalizacao = pos;

Compartilhar este post


Link para o post
Compartilhar em outros sites

então cara, não vai rolar pq:

 

getCurrentPosition

aceita uma clousure, e esta tranca o escopo. Fazendo com oq tá ali dentro seja privado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vish, isso é um problema então.

 

Analisem comigo o trecho completo:

function iniciarMapa(){

			// * Opções do mapa
			var posicionamentoGeolocalizacao;
			var mapOptions = {
				zoom: 14,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			};
			map = new google.maps.Map(document.getElementById('mapaCanvas'), mapOptions);

			// * Geolocalizador em HTML5
			if(navigator.geolocation)
			{
				navigator.geolocation.getCurrentPosition(function(position)
				{
					var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
					var infowindow = new google.maps.InfoWindow(
					{
						map: map,
						position: pos,
						content: 'Sua localização aproximada'
					});

					posicionamentoGeolocalizacao = pos;
					map.setCenter(pos);

					//alert("Retorna certo? "+posicionamentoGeolocalizacao);

				}, function()
				{
					handleNoGeolocation(true);
				});

				//alert("Retorna undefined? "+posicionamentoGeolocalizacao);

			} else {
				handleNoGeolocation(false); // Caso o navegador não possua geolocalizador
			}

			// * Desenha um circulo no raio escolhido
			circle = new google.maps.Circle({
				center: posicionamentoGeolocalizacao,
				fillColor:"#FF0000",
				fillOpacity: 0.5,
				strokeColor:"#FFFF00",
				strokeOpacity: 0.5,
				strokeWeight: 5,
				zIndex: 5,
				radius: varRaioZoom*1000
			});
			circle.setMap(map);

		}

 

Neste ultimo bloco de código, temos alí o option center: posicionamentoGeolocalizacao... alí eu precisava do valor daqueeela variável pos. Não existe jeito? :-( ou outra lógica, sei lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum.. pq você não chama o Circle logo depois do map.setCenter(pos); ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa pergunta. :closedeyes: pq não fiz isso antes?

 

Deu certo! Está ficando uma maravilha o script! Quero compartilhar o sistema muito em breve :-) Para o básico falta pouca coisa... eu consegui determinar um raio em km dentro de um ponto central. Consegui também adicionar marcadores dinâmicos através de endereço, sem latitude e longitude... agora só tenho que juntar tudo pra funcionar :upset:

 

Abraços William, valeu novamente! :thumbsup:

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.