Ir para conteúdo

POWERED BY:

Arquivado

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

mauricio2603

Google Maps V3

Recommended Posts

Bom galera, minha dúvida é o seguinte.

 

Eu renderizei um mapa usando a API v3 do google maps... e em seguida colokei uns 120 marcadores no mapa, usando as próprias funções do google...

 

o que eu preciso é o seguinte:

 

preciso criar um input text, e nele o usuario vai digitar seu CEP, e nisso ele vai traçar uma rota entre o CEP do kra, e o marcador mais próximo dele. levando em consideração que todos os marcadores ja estão em seus devidos lugares.

 

alguem ai consegue me ajudar?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://code.google.com/intl/pt-BR/apis/maps/documentation/directions/

 

Com isso aí você calcula a rota. Agora, para calcular o marcador mais próximo, acho que você vai ter que calcular a distância do ponto até cada marcador e verificar qual o menor.

 

Corrijam-me se falei besteira, nunca usei o cálculo de rotas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://code.google.com/intl/pt-BR/apis/maps/documentation/directions/

 

Com isso aí você calcula a rota. Agora, para calcular o marcador mais próximo, acho que você vai ter que calcular a distância do ponto até cada marcador e verificar qual o menor.

 

Corrijam-me se falei besteira, nunca usei o cálculo de rotas.

 

na real você esta certíssimo. akbei de descobrir uma função aki

 

	var pi = Math.PI;
	var R = 6371; //equatorial radius
	var distances = [];
	var closest = -1;

	var lat1 = -23.567602;
	var lon1 = -46.649125;

	for( i=0;i<markers.length; i++ ) {

		var lat2 = markers[i].position.lat();
		var lon2 = markers[i].position.lng();

		var chLat = lat2-lat1;
		var chLon = lon2-lon1;


		var dLat = chLat*(pi/180);
		var dLon = chLon*(pi/180);

		var rLat1 = lat1*(pi/180);
		var rLat2 = lat2*(pi/180);

		var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
				Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2); 
		var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
		var d = R * c;


		distances[i] = d;
		if ( closest == -1 || d < distances[closest] ) {
			closest = i;
		}
	}

 

uq eu faço é guardar os markers q eu vou colocando no mapa dentro de um array, e depois faço um for, pra passar de um em um, e comprar com a lat e long que eu quiser. dai a variavel 'closest' vai receber o campo do array que for o mais próximo da lat e long q eu colokei.

 

vai que alguem precise usar, o código ta ai... funcionando certinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

valeu maciel! vou dar uma lida nesse link. só falta traçar mesmo a rota agora. o ponto mais próximo eu consegui pegar.

 

esta quase pronto... so ta faltando uma coisa...

 

o skema de pegar lat e long do google... q retorna um json de acorod com os parametros...

 

http://maps.googleapis.com/maps/api/geocode/json?address=09851-130&sensor=true

 

beleza, ele retorna certinho o json com lat e long (e MUITAS coisas a mais)...

 

mas como eu faço pra pegar esse json pelo javascript?? pra depois tratar certinho...

 

tentei usar

$.getJSON('https://maps.googleapis.com/maps/api/geocode/json?address=09851-130&sensor=true', function(data) {
});

 

mas acho q ele não permite acessar dessa forma, ja que no console ele diz que não conseguiu acessar a url.;

 

alguem sabe como eu posso pegar esse json com javascript?? ou algum outro metodo de pegar lat e long pelo endereço usando javascript tbm??

 

valeu! quando eu terminar, vou subir o código e disponibilizar pra download pra qm precisar usar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu usei o geocoder para isso:

 

var geocoder;
var geocodeLatlng;
var geocodeAddress;
function codeAddress(address) {
geocodeLatlng = new google.maps.LatLng();
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
	if (status == google.maps.GeocoderStatus.OK) {
		geocodeLatlng = results[0].geometry.location;
		geocodeAddress = results[0].formatted_address;
	} else
		// Trata erros
});
}

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.